Compare commits

...

26 Commits

Author SHA1 Message Date
github-actions[bot]
bd14273201 Merge pull request #11828 from firefly-iii/develop
🤖 Automatically merge the PR into the main branch.
2026-02-27 21:55:42 +01:00
github-actions[bot]
2a6ba8f00f Merge pull request #11827 from firefly-iii/release-1772225731
🤖 Automatically merge the PR into the develop branch.
2026-02-27 21:55:38 +01:00
JC5
5986137bb0 🤖 Auto commit for release 'v6.5.1' on 2026-02-27 2026-02-27 21:55:31 +01:00
github-actions[bot]
1f5962cfbc Merge pull request #11826 from firefly-iii/release-1772225098
🤖 Automatically merge the PR into the develop branch.
2026-02-27 21:45:08 +01:00
JC5
f40cb96906 🤖 Auto commit for release 'develop' on 2026-02-27 2026-02-27 21:44:58 +01:00
James Cole
92b1079eb1 Expand changelog. 2026-02-27 21:39:35 +01:00
James Cole
555060ead9 Fix URL, thanks @fabienfitoussi 2026-02-27 21:33:27 +01:00
James Cole
d88b728073 Expand middleware. 2026-02-27 21:29:49 +01:00
James Cole
5255a17b38 Fix an issue using an intentionally vague description. 2026-02-27 21:29:38 +01:00
James Cole
dad596dc26 Fix #11750 2026-02-27 21:27:18 +01:00
James Cole
b357a5d5ea Fix null pointer in available budget calculation. 2026-02-27 21:25:33 +01:00
James Cole
ae6adf90ee Fix https://github.com/firefly-iii/firefly-iii/issues/11817 2026-02-26 20:47:10 +01:00
James Cole
4f0b1c9914 Merge branch 'main' into develop 2026-02-25 06:51:21 +01:00
James Cole
dc718d6b89 Merge pull request #11808 from CinnamonPyro/feature/add-currency-THB
Add Thai baht to Currency Seeder
2026-02-25 06:29:50 +01:00
Cinnamon Pyro
5252ceeaee Add Thai baht to Currency Seeder
Signed-off-by: Cinnamon Pyro <69516214+CinnamonPyro@users.noreply.github.com>
2026-02-25 11:11:25 +07:00
James Cole
56a1eb6515 Fix echo statement for Data importer version
Signed-off-by: James Cole <james@firefly-iii.org>
2026-02-24 08:07:45 +01:00
github-actions[bot]
62ef3966ed Merge pull request #11799 from firefly-iii/develop
🤖 Automatically merge the PR into the main branch.
2026-02-23 20:18:47 +01:00
github-actions[bot]
241d8fd921 Merge pull request #11798 from firefly-iii/release-1771874314
🤖 Automatically merge the PR into the develop branch.
2026-02-23 20:18:41 +01:00
JC5
9028898232 🤖 Auto commit for release 'v6.5.0' on 2026-02-23 2026-02-23 20:18:34 +01:00
James Cole
bf12a5631d Expand changelog. 2026-02-23 20:13:47 +01:00
github-actions[bot]
8852bb022b Merge pull request #11797 from firefly-iii/release-1771873461
🤖 Automatically merge the PR into the develop branch.
2026-02-23 20:04:29 +01:00
JC5
03d0d503b0 🤖 Auto commit for release 'develop' on 2026-02-23 2026-02-23 20:04:21 +01:00
James Cole
6b8c8c1b28 Merge pull request #11796 from R1DEN/main
fix operator order for pc_amount bug
2026-02-23 11:41:16 +01:00
R1DEN
e43a188af8 fix operator order for pc_amount bug 2026-02-23 11:54:48 +02:00
Sander Dorigo
a806bf3b10 Merge branch 'develop' of https://github.com/firefly-iii/firefly-iii into develop 2026-02-23 08:19:34 +01:00
Sander Dorigo
9b05c777cd Fix https://github.com/firefly-iii/firefly-iii/issues/11792 2026-02-23 08:08:46 +01:00
16 changed files with 269 additions and 231 deletions

View File

@@ -1264,16 +1264,16 @@
},
{
"name": "symfony/console",
"version": "v8.0.4",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "ace03c4cf9805080ff40cbeec69fca180c339a3b"
"reference": "488285876e807a4777f074041d8bb508623419fa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/ace03c4cf9805080ff40cbeec69fca180c339a3b",
"reference": "ace03c4cf9805080ff40cbeec69fca180c339a3b",
"url": "https://api.github.com/repos/symfony/console/zipball/488285876e807a4777f074041d8bb508623419fa",
"reference": "488285876e807a4777f074041d8bb508623419fa",
"shasum": ""
},
"require": {
@@ -1330,7 +1330,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v8.0.4"
"source": "https://github.com/symfony/console/tree/v8.0.6"
},
"funding": [
{
@@ -1350,7 +1350,7 @@
"type": "tidelift"
}
],
"time": "2026-01-13T13:06:50+00:00"
"time": "2026-02-25T16:59:43+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -1582,16 +1582,16 @@
},
{
"name": "symfony/filesystem",
"version": "v8.0.1",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "d937d400b980523dc9ee946bb69972b5e619058d"
"reference": "7bf9162d7a0dff98d079b72948508fa48018a770"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/d937d400b980523dc9ee946bb69972b5e619058d",
"reference": "d937d400b980523dc9ee946bb69972b5e619058d",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/7bf9162d7a0dff98d079b72948508fa48018a770",
"reference": "7bf9162d7a0dff98d079b72948508fa48018a770",
"shasum": ""
},
"require": {
@@ -1628,7 +1628,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v8.0.1"
"source": "https://github.com/symfony/filesystem/tree/v8.0.6"
},
"funding": [
{
@@ -1648,20 +1648,20 @@
"type": "tidelift"
}
],
"time": "2025-12-01T09:13:36+00:00"
"time": "2026-02-25T16:59:43+00:00"
},
{
"name": "symfony/finder",
"version": "v8.0.5",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0"
"reference": "441404f09a54de6d1bd6ad219e088cdf4c91f97c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/8bd576e97c67d45941365bf824e18dc8538e6eb0",
"reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0",
"url": "https://api.github.com/repos/symfony/finder/zipball/441404f09a54de6d1bd6ad219e088cdf4c91f97c",
"reference": "441404f09a54de6d1bd6ad219e088cdf4c91f97c",
"shasum": ""
},
"require": {
@@ -1696,7 +1696,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v8.0.5"
"source": "https://github.com/symfony/finder/tree/v8.0.6"
},
"funding": [
{
@@ -1716,7 +1716,7 @@
"type": "tidelift"
}
],
"time": "2026-01-26T15:08:38+00:00"
"time": "2026-01-29T09:41:02+00:00"
},
{
"name": "symfony/options-resolver",
@@ -2588,16 +2588,16 @@
},
{
"name": "symfony/string",
"version": "v8.0.4",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "758b372d6882506821ed666032e43020c4f57194"
"reference": "6c9e1108041b5dce21a9a4984b531c4923aa9ec4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/758b372d6882506821ed666032e43020c4f57194",
"reference": "758b372d6882506821ed666032e43020c4f57194",
"url": "https://api.github.com/repos/symfony/string/zipball/6c9e1108041b5dce21a9a4984b531c4923aa9ec4",
"reference": "6c9e1108041b5dce21a9a4984b531c4923aa9ec4",
"shasum": ""
},
"require": {
@@ -2654,7 +2654,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v8.0.4"
"source": "https://github.com/symfony/string/tree/v8.0.6"
},
"funding": [
{
@@ -2674,7 +2674,7 @@
"type": "tidelift"
}
],
"time": "2026-01-12T12:37:40+00:00"
"time": "2026-02-09T10:14:57+00:00"
}
],
"packages-dev": [],

View File

@@ -41,7 +41,7 @@ jobs:
DDNOV="${DDNOV:1}"
echo "Firefly III version is ${{ steps.ff3version.outputs.release }}, without v is $FFNOV"
echo "Data importer version is ${{ steps.ff3version.outputs.release }}, without v is $FFNOV"
echo "Data importer version is ${{ steps.ff3version.outputs.release }}, without v is $DDNOV"
# user includes no debug info at all, and does not mention current version.
# user includes no debug info at all, but does mention current version

View File

@@ -4,6 +4,8 @@ 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.
## 2026
- Cinnamon Pyro
- R1DEN
- RiDEN
- Khoa Nguyen
- Nick Huang

View File

@@ -230,7 +230,11 @@ class AttachmentHelper implements AttachmentHelperInterface
$count = 0;
// ignore lines about polymorphic calls.
if ($model instanceof PiggyBank) {
$count = $model->account->user->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count();
$count = $model
->accounts()
->first()
->user->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count()
;
}
if (!$model instanceof PiggyBank) {
$count = $model->user->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count();
@@ -260,7 +264,7 @@ class AttachmentHelper implements AttachmentHelperInterface
$user = $model->user;
// ignore lines about polymorphic calls.
if ($model instanceof PiggyBank) {
$user = $model->account->user;
$user = $model->accounts()->first()->user;
}
$attachment = new Attachment(); // create Attachment object.

View File

@@ -150,9 +150,6 @@ class RecalculatesPrimaryCurrencyAmounts
->where('transaction_journals.user_group_id', $userGroup->id)
->where(static function (Builder $q): void {
$q->whereNotNull('native_amount')->orWhereNotNull('native_foreign_amount');
if ('pgsql' !== config('database.default')) {
$q->orWhere('native_amount', '!=', '')->orWhere('native_foreign_amount', '!=', '');
}
})
->update(['native_amount' => null, 'native_foreign_amount' => null])
;

View File

@@ -25,6 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Services\FireflyIIIOrg\Update;
use Carbon\Carbon;
use Exception;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use Illuminate\Support\Facades\Log;
@@ -180,7 +181,7 @@ class GitHubUpdateRequest implements UpdateRequestInterface
private function getReleases(): array
{
$client = new Client();
$opts = ['headers' => ['User-Agent' => 'FireflyIII/'.config('firefly.version')]];
$opts = ['timeout' => 5.0, 'headers' => ['User-Agent' => 'FireflyIII/'.config('firefly.version')]];
$return = [];
$body = '';
if ($this->localDebug && file_exists('json.json')) {
@@ -189,7 +190,7 @@ class GitHubUpdateRequest implements UpdateRequestInterface
if (!$this->localDebug) {
try {
$res = $client->get('https://api.github.com/repos/firefly-iii/firefly-iii/releases', $opts);
} catch (ClientException $e) {
} catch (ClientException|Exception $e) {
Log::error($e->getMessage());
return [];

View File

@@ -188,6 +188,14 @@ class ExportDataGenerator
// @phpstan-ignore-line
// @phpstan-ignore-line
// @phpstan-ignore-line
// @phpstan-ignore-line
// @phpstan-ignore-line
public function __construct()
{
$this->accounts = new Collection();

View File

@@ -150,7 +150,7 @@ class AvailableBudgetCalculator
$item->start_date->format('Y-m-d'),
$item->end_date->format('Y-m-d')
));
$this->abRepository->recalculateAmount($availableBudget);
$this->abRepository->recalculateAmount($item);
}
if (!$this->create) {
Log::debug('Can stop here. have not been asked to create an available budget.');

View File

@@ -388,7 +388,7 @@ class TransactionGroupTransformer extends AbstractTransformer
}
// set primary amount to the normal amount if the currency matches.
if ($transaction['primary_currency']['id'] ?? null === $transaction['currency_id']) {
if (($transaction['primary_currency']['id'] ?? null) === (string) $transaction['currency_id']) {
$transaction['pc_amount'] = $amount;
}

View File

@@ -157,11 +157,7 @@ $app = Application::configure(basePath: dirname(__DIR__))
// This middleware is added to ensure that the user is not only logged in and
// authenticated (with MFA and everything), but also admin.
$middleware->appendToGroup('admin', [
Authenticate::class,
MFAMiddleware::class,
IsAdmin::class,
Range::class,
InterestingMessage::class,
]);
// if the user is not logged in, this group applies.

View File

@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## 6.5.1 - 2026-02-28
> [!IMPORTANT]
> This releases also fixes a security issue, relevant only if you have multiple users using your Firefly III instance. Upgrading is recommended.
### Added
- [PR 11808](https://github.com/firefly-iii/firefly-iii/pull/11808) (Add Thai baht to Currency Seeder) reported by @CinnamonPyro
### Fixed
- [Issue 11817](https://github.com/firefly-iii/firefly-iii/issues/11817) (500 Error if internet is inaccessible while checking for updates) reported by @NoiTheCat
- [Issue 11814](https://github.com/firefly-iii/firefly-iii/issues/11814) (Budget : error with CRON after switch user range view) reported by @fabienfitoussi
- [Issue 11750](https://github.com/firefly-iii/firefly-iii/issues/11750) (500 error when creating first user with USD balance (works after refresh)) reported by @pinalgirkar
### Security
- Security issue where any authenticated user with API access also has read access to the `/api/v1/users` endpoint. Authenticated users would be able to see other user's email addresses, blocked status and roles, even when not admin. No actual financial data was exposed, just the user's info itself.
### API
- Added extra checks to the `/api/v1/users` endpoints.
## v6.5.0 - 2026-02-20
> [!IMPORTANT]
@@ -24,6 +48,8 @@ And yes, despite my goal not to change things, some very clever users (that's yo
- [Discussion 11685](https://github.com/orgs/firefly-iii/discussions/11685) (Yearly budget best practices) started by @molnarti
- [Issue 11778](https://github.com/firefly-iii/firefly-iii/issues/11778) (API update rule trigger only accepts "store-journal") reported by @jhns-de
- [Issue 11785](https://github.com/firefly-iii/firefly-iii/issues/11785) (The `/api/v1/chart/account/overview` endpoint returns incorrect balances when `period` is set to anything larger than `1D` (e.g. `1W`, `1M`).) reported by @R1DEN
- [Issue 11792](https://github.com/firefly-iii/firefly-iii/issues/11792) (Uploading attachment to Piggy Bank causes "Attempt to read property 'user' on null" error) reported by @MrWuTalk2022
- [Issue 11795](https://github.com/firefly-iii/firefly-iii/issues/11795) (`pc_amount` always equals raw `amount` — operator precedence bug in TransactionGroupTransformer) reported by @R1DEN
- Test notification was broken for system owners.
## v6.4.23 - 2026-02-20

280
composer.lock generated
View File

@@ -1878,16 +1878,16 @@
},
{
"name": "laravel/framework",
"version": "v12.52.0",
"version": "v12.53.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "d5511fa74f4608dbb99864198b1954042aa8d5a7"
"reference": "f57f035c0d34503d9ff30be76159bb35a003cd1f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/d5511fa74f4608dbb99864198b1954042aa8d5a7",
"reference": "d5511fa74f4608dbb99864198b1954042aa8d5a7",
"url": "https://api.github.com/repos/laravel/framework/zipball/f57f035c0d34503d9ff30be76159bb35a003cd1f",
"reference": "f57f035c0d34503d9ff30be76159bb35a003cd1f",
"shasum": ""
},
"require": {
@@ -2096,7 +2096,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2026-02-17T17:07:04+00:00"
"time": "2026-02-24T14:35:15+00:00"
},
{
"name": "laravel/passport",
@@ -2235,16 +2235,16 @@
},
{
"name": "laravel/serializable-closure",
"version": "v2.0.9",
"version": "v2.0.10",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
"reference": "8f631589ab07b7b52fead814965f5a800459cb3e"
"reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/8f631589ab07b7b52fead814965f5a800459cb3e",
"reference": "8f631589ab07b7b52fead814965f5a800459cb3e",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/870fc81d2f879903dfc5b60bf8a0f94a1609e669",
"reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669",
"shasum": ""
},
"require": {
@@ -2292,7 +2292,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
"time": "2026-02-03T06:55:34+00:00"
"time": "2026-02-20T19:59:49+00:00"
},
{
"name": "laravel/slack-notification-channel",
@@ -2895,16 +2895,16 @@
},
{
"name": "league/flysystem",
"version": "3.31.0",
"version": "3.32.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
"reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff"
"reference": "254b1595b16b22dbddaaef9ed6ca9fdac4956725"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1717e0b3642b0df65ecb0cc89cdd99fa840672ff",
"reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/254b1595b16b22dbddaaef9ed6ca9fdac4956725",
"reference": "254b1595b16b22dbddaaef9ed6ca9fdac4956725",
"shasum": ""
},
"require": {
@@ -2972,9 +2972,9 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
"source": "https://github.com/thephpleague/flysystem/tree/3.31.0"
"source": "https://github.com/thephpleague/flysystem/tree/3.32.0"
},
"time": "2026-01-23T15:38:47+00:00"
"time": "2026-02-25T17:01:41+00:00"
},
{
"name": "league/flysystem-local",
@@ -5058,16 +5058,16 @@
},
{
"name": "predis/predis",
"version": "v3.4.0",
"version": "v3.4.1",
"source": {
"type": "git",
"url": "https://github.com/predis/predis.git",
"reference": "1183f5732e6b10efd33f64984a96726eaecb59aa"
"reference": "0850f2f36ee179f0ff96c92c750e1366c6cd754c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/predis/predis/zipball/1183f5732e6b10efd33f64984a96726eaecb59aa",
"reference": "1183f5732e6b10efd33f64984a96726eaecb59aa",
"url": "https://api.github.com/repos/predis/predis/zipball/0850f2f36ee179f0ff96c92c750e1366c6cd754c",
"reference": "0850f2f36ee179f0ff96c92c750e1366c6cd754c",
"shasum": ""
},
"require": {
@@ -5109,7 +5109,7 @@
],
"support": {
"issues": "https://github.com/predis/predis/issues",
"source": "https://github.com/predis/predis/tree/v3.4.0"
"source": "https://github.com/predis/predis/tree/v3.4.1"
},
"funding": [
{
@@ -5117,7 +5117,7 @@
"type": "github"
}
],
"time": "2026-02-11T17:30:28+00:00"
"time": "2026-02-23T19:51:21+00:00"
},
{
"name": "psr/cache",
@@ -6366,16 +6366,16 @@
},
{
"name": "symfony/cache",
"version": "v8.0.5",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "92e9960386c7e01f58198038c199d522959a843c"
"reference": "59184fa14658d7724cd9b8743d91c1b1aa618bff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/92e9960386c7e01f58198038c199d522959a843c",
"reference": "92e9960386c7e01f58198038c199d522959a843c",
"url": "https://api.github.com/repos/symfony/cache/zipball/59184fa14658d7724cd9b8743d91c1b1aa618bff",
"reference": "59184fa14658d7724cd9b8743d91c1b1aa618bff",
"shasum": ""
},
"require": {
@@ -6442,7 +6442,7 @@
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v8.0.5"
"source": "https://github.com/symfony/cache/tree/v8.0.6"
},
"funding": [
{
@@ -6462,7 +6462,7 @@
"type": "tidelift"
}
],
"time": "2026-01-27T16:18:07+00:00"
"time": "2026-02-21T23:29:37+00:00"
},
{
"name": "symfony/cache-contracts",
@@ -6619,16 +6619,16 @@
},
{
"name": "symfony/console",
"version": "v7.4.4",
"version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894"
"reference": "6d643a93b47398599124022eb24d97c153c12f27"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894",
"reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894",
"url": "https://api.github.com/repos/symfony/console/zipball/6d643a93b47398599124022eb24d97c153c12f27",
"reference": "6d643a93b47398599124022eb24d97c153c12f27",
"shasum": ""
},
"require": {
@@ -6693,7 +6693,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v7.4.4"
"source": "https://github.com/symfony/console/tree/v7.4.6"
},
"funding": [
{
@@ -6713,20 +6713,20 @@
"type": "tidelift"
}
],
"time": "2026-01-13T11:36:38+00:00"
"time": "2026-02-25T17:02:47+00:00"
},
{
"name": "symfony/css-selector",
"version": "v8.0.0",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "6225bd458c53ecdee056214cb4a2ffaf58bd592b"
"reference": "2a178bf80f05dbbe469a337730eba79d61315262"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/6225bd458c53ecdee056214cb4a2ffaf58bd592b",
"reference": "6225bd458c53ecdee056214cb4a2ffaf58bd592b",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/2a178bf80f05dbbe469a337730eba79d61315262",
"reference": "2a178bf80f05dbbe469a337730eba79d61315262",
"shasum": ""
},
"require": {
@@ -6762,7 +6762,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/css-selector/tree/v8.0.0"
"source": "https://github.com/symfony/css-selector/tree/v8.0.6"
},
"funding": [
{
@@ -6782,7 +6782,7 @@
"type": "tidelift"
}
],
"time": "2025-10-30T14:17:19+00:00"
"time": "2026-02-17T13:07:04+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -7163,16 +7163,16 @@
},
{
"name": "symfony/finder",
"version": "v7.4.5",
"version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb"
"reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
"reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
"url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf",
"reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf",
"shasum": ""
},
"require": {
@@ -7207,7 +7207,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v7.4.5"
"source": "https://github.com/symfony/finder/tree/v7.4.6"
},
"funding": [
{
@@ -7227,20 +7227,20 @@
"type": "tidelift"
}
],
"time": "2026-01-26T15:07:59+00:00"
"time": "2026-01-29T09:40:50+00:00"
},
{
"name": "symfony/http-client",
"version": "v8.0.5",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "f9fdd372473e66469c6d32a4ed12efcffdea38c4"
"reference": "f425139487f904e198f99e3c416c79ed08cef3c3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/f9fdd372473e66469c6d32a4ed12efcffdea38c4",
"reference": "f9fdd372473e66469c6d32a4ed12efcffdea38c4",
"url": "https://api.github.com/repos/symfony/http-client/zipball/f425139487f904e198f99e3c416c79ed08cef3c3",
"reference": "f425139487f904e198f99e3c416c79ed08cef3c3",
"shasum": ""
},
"require": {
@@ -7303,7 +7303,7 @@
"http"
],
"support": {
"source": "https://github.com/symfony/http-client/tree/v8.0.5"
"source": "https://github.com/symfony/http-client/tree/v8.0.6"
},
"funding": [
{
@@ -7323,7 +7323,7 @@
"type": "tidelift"
}
],
"time": "2026-01-27T16:18:07+00:00"
"time": "2026-02-20T07:51:53+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -7405,16 +7405,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v7.4.5",
"version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "446d0db2b1f21575f1284b74533e425096abdfb6"
"reference": "fd97d5e926e988a363cef56fbbf88c5c528e9065"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/446d0db2b1f21575f1284b74533e425096abdfb6",
"reference": "446d0db2b1f21575f1284b74533e425096abdfb6",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/fd97d5e926e988a363cef56fbbf88c5c528e9065",
"reference": "fd97d5e926e988a363cef56fbbf88c5c528e9065",
"shasum": ""
},
"require": {
@@ -7463,7 +7463,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.4.5"
"source": "https://github.com/symfony/http-foundation/tree/v7.4.6"
},
"funding": [
{
@@ -7483,20 +7483,20 @@
"type": "tidelift"
}
],
"time": "2026-01-27T16:16:02+00:00"
"time": "2026-02-21T16:25:55+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v7.4.5",
"version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "229eda477017f92bd2ce7615d06222ec0c19e82a"
"reference": "002ac0cf4cd972a7fd0912dcd513a95e8a81ce83"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/229eda477017f92bd2ce7615d06222ec0c19e82a",
"reference": "229eda477017f92bd2ce7615d06222ec0c19e82a",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/002ac0cf4cd972a7fd0912dcd513a95e8a81ce83",
"reference": "002ac0cf4cd972a7fd0912dcd513a95e8a81ce83",
"shasum": ""
},
"require": {
@@ -7538,7 +7538,7 @@
"symfony/config": "^6.4|^7.0|^8.0",
"symfony/console": "^6.4|^7.0|^8.0",
"symfony/css-selector": "^6.4|^7.0|^8.0",
"symfony/dependency-injection": "^6.4|^7.0|^8.0",
"symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0",
"symfony/dom-crawler": "^6.4|^7.0|^8.0",
"symfony/expression-language": "^6.4|^7.0|^8.0",
"symfony/finder": "^6.4|^7.0|^8.0",
@@ -7582,7 +7582,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.4.5"
"source": "https://github.com/symfony/http-kernel/tree/v7.4.6"
},
"funding": [
{
@@ -7602,20 +7602,20 @@
"type": "tidelift"
}
],
"time": "2026-01-28T10:33:42+00:00"
"time": "2026-02-26T08:30:57+00:00"
},
{
"name": "symfony/mailer",
"version": "v7.4.4",
"version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
"reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6"
"reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mailer/zipball/7b750074c40c694ceb34cb926d6dffee231c5cd6",
"reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6",
"url": "https://api.github.com/repos/symfony/mailer/zipball/b02726f39a20bc65e30364f5c750c4ddbf1f58e9",
"reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9",
"shasum": ""
},
"require": {
@@ -7666,7 +7666,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/mailer/tree/v7.4.4"
"source": "https://github.com/symfony/mailer/tree/v7.4.6"
},
"funding": [
{
@@ -7686,7 +7686,7 @@
"type": "tidelift"
}
],
"time": "2026-01-08T08:25:11+00:00"
"time": "2026-02-25T16:50:00+00:00"
},
{
"name": "symfony/mailgun-mailer",
@@ -7760,16 +7760,16 @@
},
{
"name": "symfony/mime",
"version": "v7.4.5",
"version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "b18c7e6e9eee1e19958138df10412f3c4c316148"
"reference": "9fc881d95feae4c6c48678cb6372bd8a7ba04f5f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/b18c7e6e9eee1e19958138df10412f3c4c316148",
"reference": "b18c7e6e9eee1e19958138df10412f3c4c316148",
"url": "https://api.github.com/repos/symfony/mime/zipball/9fc881d95feae4c6c48678cb6372bd8a7ba04f5f",
"reference": "9fc881d95feae4c6c48678cb6372bd8a7ba04f5f",
"shasum": ""
},
"require": {
@@ -7780,7 +7780,7 @@
},
"conflict": {
"egulias/email-validator": "~3.0.0",
"phpdocumentor/reflection-docblock": "<5.2|>=6",
"phpdocumentor/reflection-docblock": "<5.2|>=7",
"phpdocumentor/type-resolver": "<1.5.1",
"symfony/mailer": "<6.4",
"symfony/serializer": "<6.4.3|>7.0,<7.0.3"
@@ -7788,7 +7788,7 @@
"require-dev": {
"egulias/email-validator": "^2.1.10|^3.1|^4",
"league/html-to-markdown": "^5.0",
"phpdocumentor/reflection-docblock": "^5.2",
"phpdocumentor/reflection-docblock": "^5.2|^6.0",
"symfony/dependency-injection": "^6.4|^7.0|^8.0",
"symfony/process": "^6.4|^7.0|^8.0",
"symfony/property-access": "^6.4|^7.0|^8.0",
@@ -7825,7 +7825,7 @@
"mime-type"
],
"support": {
"source": "https://github.com/symfony/mime/tree/v7.4.5"
"source": "https://github.com/symfony/mime/tree/v7.4.6"
},
"funding": [
{
@@ -7845,7 +7845,7 @@
"type": "tidelift"
}
],
"time": "2026-01-27T08:59:58+00:00"
"time": "2026-02-05T15:57:06+00:00"
},
{
"name": "symfony/options-resolver",
@@ -8902,16 +8902,16 @@
},
{
"name": "symfony/routing",
"version": "v7.4.4",
"version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "0798827fe2c79caeed41d70b680c2c3507d10147"
"reference": "238d749c56b804b31a9bf3e26519d93b65a60938"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/0798827fe2c79caeed41d70b680c2c3507d10147",
"reference": "0798827fe2c79caeed41d70b680c2c3507d10147",
"url": "https://api.github.com/repos/symfony/routing/zipball/238d749c56b804b31a9bf3e26519d93b65a60938",
"reference": "238d749c56b804b31a9bf3e26519d93b65a60938",
"shasum": ""
},
"require": {
@@ -8963,7 +8963,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v7.4.4"
"source": "https://github.com/symfony/routing/tree/v7.4.6"
},
"funding": [
{
@@ -8983,7 +8983,7 @@
"type": "tidelift"
}
],
"time": "2026-01-12T12:19:02+00:00"
"time": "2026-02-25T16:50:00+00:00"
},
{
"name": "symfony/service-contracts",
@@ -9074,16 +9074,16 @@
},
{
"name": "symfony/string",
"version": "v8.0.4",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "758b372d6882506821ed666032e43020c4f57194"
"reference": "6c9e1108041b5dce21a9a4984b531c4923aa9ec4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/758b372d6882506821ed666032e43020c4f57194",
"reference": "758b372d6882506821ed666032e43020c4f57194",
"url": "https://api.github.com/repos/symfony/string/zipball/6c9e1108041b5dce21a9a4984b531c4923aa9ec4",
"reference": "6c9e1108041b5dce21a9a4984b531c4923aa9ec4",
"shasum": ""
},
"require": {
@@ -9140,7 +9140,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v8.0.4"
"source": "https://github.com/symfony/string/tree/v8.0.6"
},
"funding": [
{
@@ -9160,20 +9160,20 @@
"type": "tidelift"
}
],
"time": "2026-01-12T12:37:40+00:00"
"time": "2026-02-09T10:14:57+00:00"
},
{
"name": "symfony/translation",
"version": "v8.0.4",
"version": "v8.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "db70c8ce7db74fd2da7b1d268db46b2a8ce32c10"
"reference": "13ff19bcf2bea492d3c2fbeaa194dd6f4599ce1b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/db70c8ce7db74fd2da7b1d268db46b2a8ce32c10",
"reference": "db70c8ce7db74fd2da7b1d268db46b2a8ce32c10",
"url": "https://api.github.com/repos/symfony/translation/zipball/13ff19bcf2bea492d3c2fbeaa194dd6f4599ce1b",
"reference": "13ff19bcf2bea492d3c2fbeaa194dd6f4599ce1b",
"shasum": ""
},
"require": {
@@ -9233,7 +9233,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/translation/tree/v8.0.4"
"source": "https://github.com/symfony/translation/tree/v8.0.6"
},
"funding": [
{
@@ -9253,7 +9253,7 @@
"type": "tidelift"
}
],
"time": "2026-01-13T13:06:50+00:00"
"time": "2026-02-17T13:07:04+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -9417,16 +9417,16 @@
},
{
"name": "symfony/var-dumper",
"version": "v7.4.4",
"version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "0e4769b46a0c3c62390d124635ce59f66874b282"
"reference": "045321c440ac18347b136c63d2e9bf28a2dc0291"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e4769b46a0c3c62390d124635ce59f66874b282",
"reference": "0e4769b46a0c3c62390d124635ce59f66874b282",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/045321c440ac18347b136c63d2e9bf28a2dc0291",
"reference": "045321c440ac18347b136c63d2e9bf28a2dc0291",
"shasum": ""
},
"require": {
@@ -9480,7 +9480,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v7.4.4"
"source": "https://github.com/symfony/var-dumper/tree/v7.4.6"
},
"funding": [
{
@@ -9500,7 +9500,7 @@
"type": "tidelift"
}
],
"time": "2026-01-01T22:13:48+00:00"
"time": "2026-02-15T10:53:20+00:00"
},
{
"name": "symfony/var-exporter",
@@ -10472,24 +10472,24 @@
},
{
"name": "fruitcake/laravel-debugbar",
"version": "v4.0.9",
"version": "v4.0.10",
"source": {
"type": "git",
"url": "https://github.com/fruitcake/laravel-debugbar.git",
"reference": "4eee2f032172fd6548028395d7a1adbd8eae2ba0"
"reference": "96afd5efc93c2cb3140df356893381296259695b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fruitcake/laravel-debugbar/zipball/4eee2f032172fd6548028395d7a1adbd8eae2ba0",
"reference": "4eee2f032172fd6548028395d7a1adbd8eae2ba0",
"url": "https://api.github.com/repos/fruitcake/laravel-debugbar/zipball/96afd5efc93c2cb3140df356893381296259695b",
"reference": "96afd5efc93c2cb3140df356893381296259695b",
"shasum": ""
},
"require": {
"illuminate/routing": "^11|^12",
"illuminate/session": "^11|^12",
"illuminate/support": "^11|^12",
"illuminate/routing": "^11|^12|^13.0",
"illuminate/session": "^11|^12|^13.0",
"illuminate/support": "^11|^12|^13.0",
"php": "^8.2",
"php-debugbar/php-debugbar": "^3.1",
"php-debugbar/php-debugbar": "^3.3.1",
"php-debugbar/symfony-bridge": "^1.1"
},
"replace": {
@@ -10558,7 +10558,7 @@
],
"support": {
"issues": "https://github.com/fruitcake/laravel-debugbar/issues",
"source": "https://github.com/fruitcake/laravel-debugbar/tree/v4.0.9"
"source": "https://github.com/fruitcake/laravel-debugbar/tree/v4.0.10"
},
"funding": [
{
@@ -10570,7 +10570,7 @@
"type": "github"
}
],
"time": "2026-02-17T08:14:13+00:00"
"time": "2026-02-26T11:45:48+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -10666,40 +10666,40 @@
},
{
"name": "larastan/larastan",
"version": "v3.9.2",
"version": "v3.9.3",
"source": {
"type": "git",
"url": "https://github.com/larastan/larastan.git",
"reference": "2e9ed291bdc1969e7f270fb33c9cdf3c912daeb2"
"reference": "64a52bcc5347c89fdf131cb59f96ebfbc8d1ad65"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/larastan/larastan/zipball/2e9ed291bdc1969e7f270fb33c9cdf3c912daeb2",
"reference": "2e9ed291bdc1969e7f270fb33c9cdf3c912daeb2",
"url": "https://api.github.com/repos/larastan/larastan/zipball/64a52bcc5347c89fdf131cb59f96ebfbc8d1ad65",
"reference": "64a52bcc5347c89fdf131cb59f96ebfbc8d1ad65",
"shasum": ""
},
"require": {
"ext-json": "*",
"iamcal/sql-parser": "^0.7.0",
"illuminate/console": "^11.44.2 || ^12.4.1",
"illuminate/container": "^11.44.2 || ^12.4.1",
"illuminate/contracts": "^11.44.2 || ^12.4.1",
"illuminate/database": "^11.44.2 || ^12.4.1",
"illuminate/http": "^11.44.2 || ^12.4.1",
"illuminate/pipeline": "^11.44.2 || ^12.4.1",
"illuminate/support": "^11.44.2 || ^12.4.1",
"illuminate/console": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/container": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/contracts": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/database": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/http": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/pipeline": "^11.44.2 || ^12.4.1 || ^13",
"illuminate/support": "^11.44.2 || ^12.4.1 || ^13",
"php": "^8.2",
"phpstan/phpstan": "^2.1.32"
},
"require-dev": {
"doctrine/coding-standard": "^13",
"laravel/framework": "^11.44.2 || ^12.7.2",
"laravel/framework": "^11.44.2 || ^12.7.2 || ^13",
"mockery/mockery": "^1.6.12",
"nikic/php-parser": "^5.4",
"orchestra/canvas": "^v9.2.2 || ^10.0.1",
"orchestra/testbench-core": "^9.12.0 || ^10.1",
"orchestra/canvas": "^v9.2.2 || ^10.0.1 || ^11",
"orchestra/testbench-core": "^9.12.0 || ^10.1 || ^11",
"phpstan/phpstan-deprecation-rules": "^2.0.1",
"phpunit/phpunit": "^10.5.35 || ^11.5.15"
"phpunit/phpunit": "^10.5.35 || ^11.5.15 || ^12.5.8"
},
"suggest": {
"orchestra/testbench": "Using Larastan for analysing a package needs Testbench",
@@ -10744,7 +10744,7 @@
],
"support": {
"issues": "https://github.com/larastan/larastan/issues",
"source": "https://github.com/larastan/larastan/tree/v3.9.2"
"source": "https://github.com/larastan/larastan/tree/v3.9.3"
},
"funding": [
{
@@ -10752,7 +10752,7 @@
"type": "github"
}
],
"time": "2026-01-30T15:16:32+00:00"
"time": "2026-02-20T12:07:12+00:00"
},
{
"name": "laravel-json-api/testing",
@@ -11140,16 +11140,16 @@
},
{
"name": "php-debugbar/php-debugbar",
"version": "v3.4.0",
"version": "v3.4.1",
"source": {
"type": "git",
"url": "https://github.com/php-debugbar/php-debugbar.git",
"reference": "e50d470344b62a033a76d3d10a803b04c8e3be69"
"reference": "ee9c718797a4c1fdf6c4d980cb3edcc1eeeddcc7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/e50d470344b62a033a76d3d10a803b04c8e3be69",
"reference": "e50d470344b62a033a76d3d10a803b04c8e3be69",
"url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/ee9c718797a4c1fdf6c4d980cb3edcc1eeeddcc7",
"reference": "ee9c718797a4c1fdf6c4d980cb3edcc1eeeddcc7",
"shasum": ""
},
"require": {
@@ -11226,7 +11226,7 @@
],
"support": {
"issues": "https://github.com/php-debugbar/php-debugbar/issues",
"source": "https://github.com/php-debugbar/php-debugbar/tree/v3.4.0"
"source": "https://github.com/php-debugbar/php-debugbar/tree/v3.4.1"
},
"funding": [
{
@@ -11238,7 +11238,7 @@
"type": "github"
}
],
"time": "2026-02-14T14:10:26+00:00"
"time": "2026-02-26T11:40:30+00:00"
},
{
"name": "php-debugbar/symfony-bridge",
@@ -11356,11 +11356,11 @@
},
{
"name": "phpstan/phpstan",
"version": "2.1.39",
"version": "2.1.40",
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224",
"reference": "c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/9b2c7aeb83a75d8680ea5e7c9b7fca88052b766b",
"reference": "9b2c7aeb83a75d8680ea5e7c9b7fca88052b766b",
"shasum": ""
},
"require": {
@@ -11405,7 +11405,7 @@
"type": "github"
}
],
"time": "2026-02-11T14:48:56+00:00"
"time": "2026-02-23T15:04:35+00:00"
},
{
"name": "phpstan/phpstan-deprecation-rules",

View File

@@ -78,8 +78,8 @@ return [
'running_balance_column' => (bool)envNonEmpty('USE_RUNNING_BALANCE', true), // this is only the default value, is not used.
// see cer.php for exchange rates feature flag.
],
'version' => 'develop/2026-02-23',
'build_time' => 1771830094,
'version' => '6.5.1',
'build_time' => 1772225602,
'api_version' => '2.1.0', // field is no longer used.
'db_version' => 28, // field is no longer used.

View File

@@ -87,6 +87,7 @@ class TransactionCurrencySeeder extends Seeder
$currencies[] = ['code' => 'SAR', 'name' => 'Saudi Riyal', 'symbol' => 'SAR', 'decimal_places' => 2];
$currencies[] = ['code' => 'RSD', 'name' => 'Serbian Dinar', 'symbol' => 'RSD', 'decimal_places' => 2];
$currencies[] = ['code' => 'TWD', 'name' => 'New Taiwan Dollar', 'symbol' => 'NT$', 'decimal_places' => 0];
$currencies[] = ['code' => 'THB', 'name' => 'Thai baht', 'symbol' => '฿', 'decimal_places' => 2];
foreach ($currencies as $currency) {
if (null === TransactionCurrency::where('code', $currency['code'])->first()) {

90
package-lock.json generated
View File

@@ -3246,9 +3246,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "25.3.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz",
"integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==",
"version": "25.3.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.2.tgz",
"integrity": "sha512-RpV6r/ij22zRRdyBPcxDeKAzH43phWVKEjL2iksqo1Vz3CuBUrgmPpPhALKiRfU7OMCmeeO9vECBMsV0hMTG8Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3364,42 +3364,42 @@
}
},
"node_modules/@vue/compiler-core": {
"version": "3.5.28",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.28.tgz",
"integrity": "sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==",
"version": "3.5.29",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.29.tgz",
"integrity": "sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.0",
"@vue/shared": "3.5.28",
"@vue/shared": "3.5.29",
"entities": "^7.0.1",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.28",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.28.tgz",
"integrity": "sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==",
"version": "3.5.29",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.29.tgz",
"integrity": "sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.28",
"@vue/shared": "3.5.28"
"@vue/compiler-core": "3.5.29",
"@vue/shared": "3.5.29"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.5.28",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.28.tgz",
"integrity": "sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==",
"version": "3.5.29",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.29.tgz",
"integrity": "sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.0",
"@vue/compiler-core": "3.5.28",
"@vue/compiler-dom": "3.5.28",
"@vue/compiler-ssr": "3.5.28",
"@vue/shared": "3.5.28",
"@vue/compiler-core": "3.5.29",
"@vue/compiler-dom": "3.5.29",
"@vue/compiler-ssr": "3.5.29",
"@vue/shared": "3.5.29",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.21",
"postcss": "^8.5.6",
@@ -3407,14 +3407,14 @@
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.5.28",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.28.tgz",
"integrity": "sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==",
"version": "3.5.29",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.29.tgz",
"integrity": "sha512-Y/ARJZE6fpjzL5GH/phJmsFwx3g6t2KmHKHx5q+MLl2kencADKIrhH5MLF6HHpRMmlRAYBRSvv347Mepf1zVNw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.28",
"@vue/shared": "3.5.28"
"@vue/compiler-dom": "3.5.29",
"@vue/shared": "3.5.29"
}
},
"node_modules/@vue/component-compiler-utils": {
@@ -3496,9 +3496,9 @@
"license": "MIT"
},
"node_modules/@vue/shared": {
"version": "3.5.28",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.28.tgz",
"integrity": "sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==",
"version": "3.5.29",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.29.tgz",
"integrity": "sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==",
"dev": true,
"license": "MIT"
},
@@ -3980,9 +3980,9 @@
"license": "MIT"
},
"node_modules/autoprefixer": {
"version": "10.4.24",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz",
"integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==",
"version": "10.4.27",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz",
"integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==",
"dev": true,
"funding": [
{
@@ -4001,7 +4001,7 @@
"license": "MIT",
"dependencies": {
"browserslist": "^4.28.1",
"caniuse-lite": "^1.0.30001766",
"caniuse-lite": "^1.0.30001774",
"fraction.js": "^5.3.4",
"picocolors": "^1.1.1",
"postcss-value-parser": "^4.2.0"
@@ -4033,9 +4033,9 @@
}
},
"node_modules/axios": {
"version": "1.13.5",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz",
"integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==",
"version": "1.13.6",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz",
"integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7923,9 +7923,9 @@
}
},
"node_modules/launch-editor": {
"version": "2.13.0",
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.0.tgz",
"integrity": "sha512-u+9asUHMJ99lA15VRMXw5XKfySFR9dGXwgsgS14YTbUq3GITP58mIM32At90P5fZ+MUId5Yw+IwI/yKub7jnCQ==",
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.1.tgz",
"integrity": "sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8328,9 +8328,9 @@
"license": "MIT"
},
"node_modules/minimatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.3.tgz",
"integrity": "sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==",
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -11836,9 +11836,9 @@
"license": "BSD-2-Clause"
},
"node_modules/webpack": {
"version": "5.105.2",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz",
"integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==",
"version": "5.105.3",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.3.tgz",
"integrity": "sha512-LLBBA4oLmT7sZdHiYE/PeVuifOxYyE2uL/V+9VQP7YSYdJU7bSf7H8bZRRxW8kEPMkmVjnrXmoR3oejIdX0xbg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11848,7 +11848,7 @@
"@webassemblyjs/ast": "^1.14.1",
"@webassemblyjs/wasm-edit": "^1.14.1",
"@webassemblyjs/wasm-parser": "^1.14.1",
"acorn": "^8.15.0",
"acorn": "^8.16.0",
"acorn-import-phases": "^1.0.3",
"browserslist": "^4.28.1",
"chrome-trace-event": "^1.0.2",
@@ -11866,7 +11866,7 @@
"tapable": "^2.3.0",
"terser-webpack-plugin": "^5.3.16",
"watchpack": "^2.5.1",
"webpack-sources": "^3.3.3"
"webpack-sources": "^3.3.4"
},
"bin": {
"webpack": "bin/webpack.js"

View File

@@ -344,9 +344,10 @@ Route::group(
// User group API routes.
Route::group(
[
'namespace' => 'FireflyIII\Api\V1\Controllers\Models\UserGroup',
'prefix' => 'v1/user-groups',
'as' => 'api.v1.user-groups.',
'namespace' => 'FireflyIII\Api\V1\Controllers\Models\UserGroup',
'prefix' => 'v1/user-groups',
'as' => 'api.v1.user-groups.',
'middleware' => ['admin'],
],
static function (): void {
Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
@@ -720,9 +721,10 @@ Route::group(
// Configuration API routes
Route::group(
[
'namespace' => 'FireflyIII\Api\V1\Controllers\System',
'prefix' => 'v1/configuration',
'as' => 'api.v1.configuration.',
'namespace' => 'FireflyIII\Api\V1\Controllers\System',
'prefix' => 'v1/configuration',
'as' => 'api.v1.configuration.',
'middleware' => ['admin'],
],
static function (): void {
Route::get('', ['uses' => 'ConfigurationController@index', 'as' => 'index']);
@@ -736,6 +738,7 @@ Route::group(
'namespace' => 'FireflyIII\Api\V1\Controllers\System',
'prefix' => 'v1/users',
'as' => 'api.v1.users.',
'middleware' => ['admin'],
],
static function (): void {
Route::get('', ['uses' => 'UserController@index', 'as' => 'index']);