Compare commits

..

109 Commits

Author SHA1 Message Date
github-actions[bot] 78a21856f8 Merge pull request #12389 from firefly-iii/release-1782103068
🤖 Automatically merge the PR into the develop branch.
2026-06-22 06:37:57 +02:00
JC5 bbca9b66ec 🤖 Auto commit for release 'develop' on 2026-06-22 2026-06-22 06:37:48 +02:00
James Cole bd41dd48d6 Merge pull request #12381 from firefly-iii/dependabot/composer/develop/phpunit/phpunit-13.2.1
Bump phpunit/phpunit from 13.2.0 to 13.2.1
2026-06-22 06:11:56 +02:00
mergify[bot] a90e01dcca Merge pull request #12382 from firefly-iii/dependabot/composer/develop/rector/rector-2.5.1
Bump rector/rector from 2.4.5 to 2.5.1
2026-06-22 04:11:40 +00:00
mergify[bot] 93a0828fab Merge pull request #12383 from firefly-iii/dependabot/composer/develop/thecodingmachine/phpstan-safe-rule-1.4.4
Bump thecodingmachine/phpstan-safe-rule from 1.4.3 to 1.4.4
2026-06-22 04:11:35 +00:00
dependabot[bot] 4a75fc7c5e Bump phpunit/phpunit from 13.2.0 to 13.2.1
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 13.2.0 to 13.2.1.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/13.2.1/ChangeLog-13.2.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/13.2.0...13.2.1)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-version: 13.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-22 04:10:32 +00:00
mergify[bot] 2e9beac6a4 Merge pull request #12386 from firefly-iii/dependabot/composer/develop/laravel/framework-13.16.1
Bump laravel/framework from 13.15.0 to 13.16.1
2026-06-22 04:08:30 +00:00
dependabot[bot] 6cbf2d337f Bump laravel/framework from 13.15.0 to 13.16.1
Bumps [laravel/framework](https://github.com/laravel/framework) from 13.15.0 to 13.16.1.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/13.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/framework/compare/v13.15.0...v13.16.1)

---
updated-dependencies:
- dependency-name: laravel/framework
  dependency-version: 13.16.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-22 03:52:53 +00:00
dependabot[bot] 5f1ff01215 Bump thecodingmachine/phpstan-safe-rule from 1.4.3 to 1.4.4
Bumps [thecodingmachine/phpstan-safe-rule](https://github.com/thecodingmachine/phpstan-safe-rule) from 1.4.3 to 1.4.4.
- [Release notes](https://github.com/thecodingmachine/phpstan-safe-rule/releases)
- [Commits](https://github.com/thecodingmachine/phpstan-safe-rule/compare/v1.4.3...v1.4.4)

---
updated-dependencies:
- dependency-name: thecodingmachine/phpstan-safe-rule
  dependency-version: 1.4.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-22 03:52:27 +00:00
dependabot[bot] 753c2c37ec Bump rector/rector from 2.4.5 to 2.5.1
Bumps [rector/rector](https://github.com/rectorphp/rector) from 2.4.5 to 2.5.1.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/2.4.5...2.5.1)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-version: 2.5.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-22 03:52:22 +00:00
github-actions[bot] d26261c5b7 Merge pull request #12365 from firefly-iii/release-1781498245
🤖 Automatically merge the PR into the develop branch.
2026-06-15 06:37:34 +02:00
JC5 ced96f3d5d 🤖 Auto commit for release 'develop' on 2026-06-15 2026-06-15 06:37:25 +02:00
James Cole 2e75c24b45 Fix https://github.com/firefly-iii/firefly-iii/issues/12354 2026-06-13 15:09:34 +02:00
James Cole 677e952b45 Merge branch 'main' into develop 2026-06-10 20:37:32 +02:00
James Cole ff5a7a8d22 Merge pull request #12350 from firefly-iii/dependabot/npm_and_yarn/npm_and_yarn-47c4268404
Bump shell-quote from 1.8.3 to 1.8.4 in the npm_and_yarn group across 1 directory
2026-06-10 20:05:35 +02:00
dependabot[bot] f6af04ff4b Bump shell-quote in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [shell-quote](https://github.com/ljharb/shell-quote).


Updates `shell-quote` from 1.8.3 to 1.8.4
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/v1.8.3...v1.8.4)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-version: 1.8.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-10 17:32:10 +00:00
github-actions[bot] 2f6ab2ef96 Merge pull request #12345 from firefly-iii/release-1780917755
🤖 Automatically merge the PR into the develop branch.
2026-06-08 13:22:46 +02:00
JC5 439994f64c 🤖 Auto commit for release 'develop' on 2026-06-08 2026-06-08 13:22:36 +02:00
Sander Dorigo 1336b05f48 Fix build 2026-06-08 13:04:19 +02:00
Sander Dorigo 0885fb6319 Fix phpstan issues 2026-06-08 12:40:59 +02:00
James Cole 7a28365f7f Merge pull request #12344 from firefly-iii/dependabot/npm_and_yarn/develop/vite-8.0.16
Bump vite from 8.0.15 to 8.0.16
2026-06-08 10:17:40 +02:00
James Cole 1b68b592c8 Merge pull request #12342 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-2.2.2
Bump phpstan/phpstan from 2.2.1 to 2.2.2
2026-06-08 10:17:27 +02:00
James Cole d37f6ad6b7 Merge pull request #12343 from firefly-iii/dependabot/npm_and_yarn/develop/webpack-5.107.2
Bump webpack from 5.105.4 to 5.107.2
2026-06-08 10:17:05 +02:00
James Cole ac54acfdde Merge pull request #12341 from firefly-iii/dependabot/composer/develop/guzzlehttp/guzzle-7.11.1
Bump guzzlehttp/guzzle from 7.11.0 to 7.11.1
2026-06-08 10:12:58 +02:00
dependabot[bot] b7eef25635 Bump vite from 8.0.15 to 8.0.16
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.15 to 8.0.16.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.0.16/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.0.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-08 03:52:55 +00:00
dependabot[bot] 9dcd6bc516 Bump webpack from 5.105.4 to 5.107.2
Bumps [webpack](https://github.com/webpack/webpack) from 5.105.4 to 5.107.2.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack/compare/v5.105.4...v5.107.2)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.107.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-08 03:52:43 +00:00
dependabot[bot] 11ac6dd090 Bump phpstan/phpstan from 2.2.1 to 2.2.2
---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-version: 2.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-08 03:52:20 +00:00
dependabot[bot] 05fd28e147 Bump guzzlehttp/guzzle from 7.11.0 to 7.11.1
Bumps [guzzlehttp/guzzle](https://github.com/guzzle/guzzle) from 7.11.0 to 7.11.1.
- [Release notes](https://github.com/guzzle/guzzle/releases)
- [Changelog](https://github.com/guzzle/guzzle/blob/7.11/CHANGELOG.md)
- [Commits](https://github.com/guzzle/guzzle/compare/7.11.0...7.11.1)

---
updated-dependencies:
- dependency-name: guzzlehttp/guzzle
  dependency-version: 7.11.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-08 03:52:17 +00:00
James Cole 72fe670289 Fix https://github.com/firefly-iii/firefly-iii/issues/12339 2026-06-06 16:33:09 +02:00
James Cole 377123d41f Fix https://github.com/firefly-iii/firefly-iii/issues/12309 2026-06-06 11:15:44 +02:00
James Cole c421315465 Rename configuration class. 2026-06-06 06:38:15 +02:00
github-actions[bot] 8805e05e07 Merge pull request #12337 from firefly-iii/release-1780631165
🤖 Automatically merge the PR into the develop branch.
2026-06-05 05:46:12 +02:00
JC5 2ba082c787 🤖 Auto commit for release 'develop' on 2026-06-05 2026-06-05 05:46:06 +02:00
James Cole b1f32406cc Fix https://github.com/firefly-iii/firefly-iii/issues/12335 2026-06-05 05:41:00 +02:00
James Cole 17839d9a34 Merge pull request #12323 from firefly-iii/dependabot/npm_and_yarn/develop/vite-8.0.15
Bump vite from 8.0.14 to 8.0.15
2026-06-02 20:57:11 +02:00
James Cole 3d8f059f38 Merge pull request #12320 from firefly-iii/dependabot/npm_and_yarn/develop/bootstrap5-tags-1.7.17
Bump bootstrap5-tags from 1.7.16 to 1.7.17
2026-06-02 20:56:53 +02:00
James Cole 24af9f0e24 Merge pull request #12318 from firefly-iii/dependabot/npm_and_yarn/develop/date-fns-4.4.0
Bump date-fns from 4.3.0 to 4.4.0
2026-06-02 20:56:37 +02:00
James Cole ce0d785819 Merge pull request #12315 from firefly-iii/dependabot/npm_and_yarn/develop/vue/compiler-sfc-3.5.35
Bump @vue/compiler-sfc from 3.5.34 to 3.5.35
2026-06-02 20:56:23 +02:00
github-actions[bot] 3534367662 Merge pull request #12331 from firefly-iii/release-1780426455
🤖 Automatically merge the PR into the develop branch.
2026-06-02 20:54:24 +02:00
JC5 028a6fdd75 🤖 Auto commit for release 'develop' on 2026-06-02 2026-06-02 20:54:15 +02:00
github-actions[bot] 8d442ae1a4 Merge pull request #12330 from firefly-iii/release-1780412950
🤖 Automatically merge the PR into the develop branch.
2026-06-02 17:09:20 +02:00
JC5 b275e80571 🤖 Auto commit for release 'develop' on 2026-06-02 2026-06-02 17:09:11 +02:00
github-actions[bot] 92ea572151 Merge pull request #12327 from firefly-iii/release-1780342304
🤖 Automatically merge the PR into the develop branch.
2026-06-01 21:31:55 +02:00
JC5 9cc7747123 🤖 Auto commit for release 'develop' on 2026-06-01 2026-06-01 21:31:44 +02:00
James Cole 344bac5af0 I fix the build. 2026-06-01 21:27:11 +02:00
James Cole e7cccd6aa1 I fix the build. 2026-06-01 21:26:56 +02:00
dependabot[bot] f3f69ac95e Bump vite from 8.0.14 to 8.0.15
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.14 to 8.0.15.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.0.15/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.0.15
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 06:55:08 +00:00
dependabot[bot] 40a308779a Bump bootstrap5-tags from 1.7.16 to 1.7.17
Bumps [bootstrap5-tags](https://github.com/lekoala/bootstrap5-tags) from 1.7.16 to 1.7.17.
- [Release notes](https://github.com/lekoala/bootstrap5-tags/releases)
- [Commits](https://github.com/lekoala/bootstrap5-tags/compare/1.7.16...1.7.17)

---
updated-dependencies:
- dependency-name: bootstrap5-tags
  dependency-version: 1.7.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 06:54:48 +00:00
dependabot[bot] 51cbe00d20 Bump date-fns from 4.3.0 to 4.4.0
Bumps [date-fns](https://github.com/date-fns/date-fns) from 4.3.0 to 4.4.0.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Commits](https://github.com/date-fns/date-fns/compare/v4.3.0...v4.4.0)

---
updated-dependencies:
- dependency-name: date-fns
  dependency-version: 4.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 06:54:40 +00:00
dependabot[bot] 9e7013f498 Bump @vue/compiler-sfc from 3.5.34 to 3.5.35
Bumps [@vue/compiler-sfc](https://github.com/vuejs/core/tree/HEAD/packages/compiler-sfc) from 3.5.34 to 3.5.35.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/commits/v3.5.35/packages/compiler-sfc)

---
updated-dependencies:
- dependency-name: "@vue/compiler-sfc"
  dependency-version: 3.5.35
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 06:54:33 +00:00
James Cole 41ca780790 Some code cleanup. 2026-05-31 13:21:05 +02:00
James Cole 4475a52f20 Fix https://github.com/firefly-iii/firefly-iii/issues/12296 2026-05-30 04:30:38 +02:00
James Cole 4865123d59 Fixed #12305 2026-05-30 04:22:21 +02:00
James Cole 30fd28b928 Fix https://github.com/firefly-iii/firefly-iii/issues/12306 2026-05-30 04:13:53 +02:00
James Cole 88b74a4aab Merge branch 'main' into develop 2026-05-30 04:13:09 +02:00
James Cole 891f5cb42b Merge pull request #12302 from firefly-iii/dependabot/composer/composer-ae8d2872ee 2026-05-29 10:53:29 +02:00
dependabot[bot] 502b0bb74b Bump symfony/polyfill-intl-idn in the composer group across 1 directory
Bumps the composer group with 1 update in the / directory: [symfony/polyfill-intl-idn](https://github.com/symfony/polyfill-intl-idn).


Updates `symfony/polyfill-intl-idn` from 1.37.0 to 1.38.1
- [Release notes](https://github.com/symfony/polyfill-intl-idn/releases)
- [Commits](https://github.com/symfony/polyfill-intl-idn/compare/v1.37.0...v1.38.1)

---
updated-dependencies:
- dependency-name: symfony/polyfill-intl-idn
  dependency-version: 1.38.1
  dependency-type: indirect
  dependency-group: composer
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-29 01:14:59 +00:00
James Cole 51b9802862 Merge branch 'main' into develop 2026-05-28 05:21:58 +02:00
James Cole 66af080b09 Update lock-threads action to use dessant version
Signed-off-by: James Cole <james@firefly-iii.org>
2026-05-28 05:10:49 +02:00
James Cole 6192454c5a Merge pull request #12298 from firefly-iii/dependabot/npm_and_yarn/npm_and_yarn-6ec3e26c6e 2026-05-28 04:59:21 +02:00
dependabot[bot] c9e533097c Bump tmp in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [tmp](https://github.com/raszi/node-tmp).


Updates `tmp` from 0.2.5 to 0.2.7
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.5...v0.2.7)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.7
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-28 02:57:18 +00:00
James Cole 3c6d3069d9 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2026-05-28 04:33:58 +02:00
James Cole 11694d2667 Fix https://github.com/firefly-iii/firefly-iii/issues/12297 2026-05-28 04:33:36 +02:00
James Cole 6541ac6f34 Merge pull request #12237 from firefly-iii/dependabot/npm_and_yarn/develop/i18next-http-backend-4.0.0 2026-05-28 03:27:30 +02:00
dependabot[bot] 0fd42ea43f Bump i18next-http-backend from 3.0.6 to 4.0.0
Bumps [i18next-http-backend](https://github.com/i18next/i18next-http-backend) from 3.0.6 to 4.0.0.
- [Changelog](https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-http-backend/compare/v3.0.6...v4.0.0)

---
updated-dependencies:
- dependency-name: i18next-http-backend
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 11:41:17 +00:00
James Cole db73ae39d1 Merge pull request #12288 from firefly-iii/dependabot/npm_and_yarn/develop/vite-8.0.14
Bump vite from 8.0.13 to 8.0.14
2026-05-25 13:39:38 +02:00
James Cole 972d75dc41 Merge pull request #12290 from firefly-iii/dependabot/npm_and_yarn/develop/date-fns-4.3.0
Bump date-fns from 4.1.0 to 4.3.0
2026-05-25 13:39:23 +02:00
James Cole 7891c24f5c Merge pull request #12291 from firefly-iii/dependabot/npm_and_yarn/develop/webpack-5.107.1
Bump webpack from 5.105.4 to 5.107.1
2026-05-25 13:39:03 +02:00
dependabot[bot] 7fa4d67a3f Bump webpack from 5.105.4 to 5.107.1
Bumps [webpack](https://github.com/webpack/webpack) from 5.105.4 to 5.107.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack/compare/v5.105.4...v5.107.1)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.107.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 06:37:17 +00:00
github-actions[bot] bd2e830637 Merge pull request #12293 from firefly-iii/release-1779690884
🤖 Automatically merge the PR into the develop branch.
2026-05-25 08:34:52 +02:00
JC5 b1bb0b1e84 🤖 Auto commit for release 'develop' on 2026-05-25 2026-05-25 08:34:45 +02:00
James Cole 673e3a21f9 Had the case right the first time, duh. 2026-05-25 08:29:33 +02:00
James Cole a240074343 Fix case 2026-05-25 08:22:26 +02:00
dependabot[bot] 12baa27de9 Bump date-fns from 4.1.0 to 4.3.0
Bumps [date-fns](https://github.com/date-fns/date-fns) from 4.1.0 to 4.3.0.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Commits](https://github.com/date-fns/date-fns/compare/v4.1.0...v4.3.0)

---
updated-dependencies:
- dependency-name: date-fns
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 04:22:37 +00:00
dependabot[bot] 9e60d0ca0d Bump vite from 8.0.13 to 8.0.14
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.13 to 8.0.14.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.0.14/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.0.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 04:22:28 +00:00
James Cole a86039aa78 Merge branch 'main' into develop 2026-05-21 14:59:59 +02:00
James Cole 2c14a605e4 Remove AI assistance disclosure comments
Removed AI assistance disclosure comments from the workflow.

Signed-off-by: James Cole <james@firefly-iii.org>
2026-05-21 12:32:32 +02:00
James Cole 3b94e0479a Merge branch 'main' into develop 2026-05-21 12:16:04 +02:00
James Cole c08e3c8797 Add debug for the notification channel thing. 2026-05-21 12:15:48 +02:00
github-actions[bot] 1678c15905 Merge pull request #12276 from firefly-iii/develop
🤖 Automatically merge the PR into the main branch.
2026-05-21 06:59:51 +02:00
github-actions[bot] 37a3444816 Merge pull request #12275 from firefly-iii/release-1779339576
🤖 Automatically merge the PR into the develop branch.
2026-05-21 06:59:45 +02:00
JC5 008c9b4d8f 🤖 Auto commit for release 'v6.6.3' on 2026-05-21 2026-05-21 06:59:36 +02:00
github-actions[bot] 1c21154799 Merge pull request #12274 from firefly-iii/release-1779338975
🤖 Automatically merge the PR into the develop branch.
2026-05-21 06:49:43 +02:00
JC5 b8c05d6f26 🤖 Auto commit for release 'develop' on 2026-05-21 2026-05-21 06:49:35 +02:00
James Cole 85998cd3d7 Fix mago issues. 2026-05-21 06:44:16 +02:00
James Cole 67a048c279 Fix issues. 2026-05-21 06:38:35 +02:00
James Cole b81943fad6 Lots of mago fixes applied. 2026-05-21 06:31:24 +02:00
github-actions[bot] 9ee1b4587c Merge pull request #12273 from firefly-iii/release-1779337714
🤖 Automatically merge the PR into the develop branch.
2026-05-21 06:28:41 +02:00
JC5 7579ae2615 🤖 Auto commit for release 'develop' on 2026-05-21 2026-05-21 06:28:34 +02:00
James Cole c002cb795d Fix date fns 2026-05-21 06:23:17 +02:00
James Cole f00852aa6a Merge branch 'main' into develop 2026-05-21 06:22:28 +02:00
James Cole 3e26f21bc4 Fix patch and lock version. 2026-05-21 06:22:15 +02:00
James Cole 195fb6cdb7 Update pr-reply-no-disclosure.yml
Signed-off-by: James Cole <james@firefly-iii.org>
2026-05-21 06:07:37 +02:00
James Cole 034280ca17 Update changelog. 2026-05-20 20:53:55 +02:00
github-actions[bot] c5ce9fd1e2 Merge pull request #12272 from firefly-iii/release-1779302299
🤖 Automatically merge the PR into the develop branch.
2026-05-20 20:38:28 +02:00
JC5 3d64f7fe08 🤖 Auto commit for release 'develop' on 2026-05-20 2026-05-20 20:38:20 +02:00
James Cole f2efb69b76 Fix broken if statement 2026-05-20 20:30:30 +02:00
James Cole 7499a414f4 Expand changelog 2026-05-20 20:24:50 +02:00
James Cole 8b0f790a56 Merge branch 'main' into develop 2026-05-20 20:18:10 +02:00
James Cole b70ed32952 Merge pull request #12271 from alanturing881/fix/stored-xss-ale-piggy-name
Fix stored XSS in audit log view via piggy bank name (ale.twig)
2026-05-20 20:16:16 +02:00
James Cole 9e511c822e Update pr-reply-no-disclosure.yml
Signed-off-by: James Cole <james@firefly-iii.org>
2026-05-20 20:12:40 +02:00
iaohkut fa6c123595 Fix stored XSS in ALE view by HTML-escaping piggy bank name
The Twig template ale.twig rendered the piggy bank name from
AuditLogEntry.after.piggy using |raw, bypassing auto-escaping.
A user-controlled name containing HTML (e.g. <img onerror=...>)
would execute as JavaScript in any browser viewing the transaction
audit log (CWE-79).

Apply |e filter to escape only the user-controlled `name` parameter
before substitution into the trans() string. The |raw filter is
preserved because the `amount` parameter legitimately contains
<span> tags for currency styling.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 11:07:57 -04:00
James Cole ec1dfca2b5 Enhance PR workflow to check for author
Added logic to check for the author of the pull request.

Signed-off-by: James Cole <james@firefly-iii.org>
2026-05-19 08:15:40 +02:00
James Cole bebd3b189e Merge pull request #12265 from firefly-iii/dependabot/npm_and_yarn/develop/vite-8.0.13
Bump vite from 8.0.11 to 8.0.13
2026-05-18 08:11:34 +02:00
github-actions[bot] e3319dca5d Merge pull request #12266 from firefly-iii/release-1779078811
🤖 Automatically merge the PR into the develop branch.
2026-05-18 06:33:40 +02:00
JC5 a38cb85f55 🤖 Auto commit for release 'develop' on 2026-05-18 2026-05-18 06:33:31 +02:00
dependabot[bot] 0226673a01 Bump vite from 8.0.11 to 8.0.13
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.11 to 8.0.13.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.0.13/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.0.13
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 04:27:29 +00:00
github-actions[bot] 7816f1be9b Merge pull request #12263 from firefly-iii/release-1779030686
🤖 Automatically merge the PR into the develop branch.
2026-05-17 17:11:33 +02:00
JC5 5878173e80 🤖 Auto commit for release 'develop' on 2026-05-17 2026-05-17 17:11:26 +02:00
400 changed files with 3261 additions and 2862 deletions
+219 -130
View File
@@ -72,28 +72,29 @@
},
{
"name": "composer/pcre",
"version": "3.3.2",
"version": "3.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
"reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
"reference": "d5a341b3fb61f3001970940afb1d332968a183ed"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
"reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
"url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed",
"reference": "d5a341b3fb61f3001970940afb1d332968a183ed",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0"
},
"conflict": {
"phpstan/phpstan": "<1.11.10"
"phpstan/phpstan": "<2.2.2"
},
"require-dev": {
"phpstan/phpstan": "^1.12 || ^2",
"phpstan/phpstan-strict-rules": "^1 || ^2",
"phpunit/phpunit": "^8 || ^9"
"phpstan/phpstan": "^2",
"phpstan/phpstan-deprecation-rules": "^2",
"phpstan/phpstan-strict-rules": "^2",
"phpunit/phpunit": "^9"
},
"type": "library",
"extra": {
@@ -131,7 +132,7 @@
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
"source": "https://github.com/composer/pcre/tree/3.3.2"
"source": "https://github.com/composer/pcre/tree/3.4.0"
},
"funding": [
{
@@ -141,13 +142,9 @@
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2024-11-12T16:29:46+00:00"
"time": "2026-06-07T11:47:49+00:00"
},
{
"name": "composer/semver",
@@ -471,23 +468,23 @@
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v3.95.2",
"version": "v3.95.10",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "a28d88a5e172b27e78d0816992b15a9df3da20f1"
"reference": "93e1ab3e1f153024bd3ab23c8a349556063c6f17"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a28d88a5e172b27e78d0816992b15a9df3da20f1",
"reference": "a28d88a5e172b27e78d0816992b15a9df3da20f1",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/93e1ab3e1f153024bd3ab23c8a349556063c6f17",
"reference": "93e1ab3e1f153024bd3ab23c8a349556063c6f17",
"shasum": ""
},
"require": {
"clue/ndjson-react": "^1.3",
"composer/semver": "^3.4",
"composer/xdebug-handler": "^3.0.5",
"ergebnis/agent-detector": "^1.1.1",
"ergebnis/agent-detector": "^1.2",
"ext-filter": "*",
"ext-hash": "*",
"ext-json": "*",
@@ -498,32 +495,32 @@
"react/event-loop": "^1.5",
"react/socket": "^1.16",
"react/stream": "^1.4",
"sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0",
"sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0 || ^9.0",
"symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
"symfony/polyfill-mbstring": "^1.33",
"symfony/polyfill-php80": "^1.33",
"symfony/polyfill-php81": "^1.33",
"symfony/polyfill-php84": "^1.33",
"symfony/polyfill-mbstring": "^1.37",
"symfony/polyfill-php80": "^1.37",
"symfony/polyfill-php81": "^1.37",
"symfony/polyfill-php84": "^1.37",
"symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0",
"symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0"
},
"require-dev": {
"facile-it/paraunit": "^1.3.1 || ^2.11.0",
"infection/infection": "^0.32.7",
"justinrainbow/json-schema": "^6.8.0",
"justinrainbow/json-schema": "^6.9.0",
"keradus/cli-executor": "^2.3",
"mikey179/vfsstream": "^1.6.12",
"php-coveralls/php-coveralls": "^2.9.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8",
"phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.55",
"symfony/polyfill-php85": "^1.33",
"symfony/var-dumper": "^5.4.48 || ^6.4.32 || ^7.4.4 || ^8.0.8",
"symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0.8"
"symfony/polyfill-php85": "^1.38",
"symfony/var-dumper": "^5.4.48 || ^6.4.36 || ^7.4.8 || ^8.1.0",
"symfony/yaml": "^5.4.53 || ^6.4.41 || ^7.4.13 || ^8.1.0"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
@@ -564,7 +561,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.95.2"
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.10"
},
"funding": [
{
@@ -572,7 +569,7 @@
"type": "github"
}
],
"time": "2026-05-15T09:20:44+00:00"
"time": "2026-06-19T14:45:22+00:00"
},
{
"name": "psr/container",
@@ -1255,29 +1252,29 @@
},
{
"name": "sebastian/diff",
"version": "8.3.0",
"version": "9.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
"reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47"
"reference": "a3fb6a298a265ff487a91bbea46e03cd01dbb226"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b36d33b6e796513de7cb7df053afb3f55eefcd47",
"reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a3fb6a298a265ff487a91bbea46e03cd01dbb226",
"reference": "a3fb6a298a265ff487a91bbea46e03cd01dbb226",
"shasum": ""
},
"require": {
"php": ">=8.4"
},
"require-dev": {
"phpunit/phpunit": "^13.0",
"symfony/process": "^7.2"
"phpunit/phpunit": "^13.2",
"symfony/process": "^7.4.13"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "8.3-dev"
"dev-main": "9.0-dev"
}
},
"autoload": {
@@ -1310,7 +1307,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy",
"source": "https://github.com/sebastianbergmann/diff/tree/8.3.0"
"source": "https://github.com/sebastianbergmann/diff/tree/9.0.0"
},
"funding": [
{
@@ -1330,27 +1327,33 @@
"type": "tidelift"
}
],
"time": "2026-05-15T04:58:09+00:00"
"time": "2026-06-05T03:04:51+00:00"
},
{
"name": "symfony/console",
"version": "v8.0.11",
"version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "3156577f46a38aa1b9323aad223de7a9cd426782"
"reference": "f5a856c6ecb56b3c21ed94a5b7bf940d857d110a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/3156577f46a38aa1b9323aad223de7a9cd426782",
"reference": "3156577f46a38aa1b9323aad223de7a9cd426782",
"url": "https://api.github.com/repos/symfony/console/zipball/f5a856c6ecb56b3c21ed94a5b7bf940d857d110a",
"reference": "f5a856c6ecb56b3c21ed94a5b7bf940d857d110a",
"shasum": ""
},
"require": {
"php": ">=8.4",
"php": ">=8.4.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "^1.0",
"symfony/polyfill-php85": "^1.32",
"symfony/service-contracts": "^2.5|^3",
"symfony/string": "^7.4|^8.0"
"symfony/string": "^7.4.6|^8.0.6"
},
"conflict": {
"symfony/dependency-injection": "<8.1",
"symfony/event-dispatcher": "<8.1"
},
"provide": {
"psr/log-implementation": "1.0|2.0|3.0"
@@ -1358,14 +1361,18 @@
"require-dev": {
"psr/log": "^1|^2|^3",
"symfony/config": "^7.4|^8.0",
"symfony/dependency-injection": "^7.4|^8.0",
"symfony/event-dispatcher": "^7.4|^8.0",
"symfony/dependency-injection": "^8.1",
"symfony/event-dispatcher": "^8.1",
"symfony/filesystem": "^7.4|^8.0",
"symfony/http-foundation": "^7.4|^8.0",
"symfony/http-kernel": "^7.4|^8.0",
"symfony/lock": "^7.4|^8.0",
"symfony/messenger": "^7.4|^8.0",
"symfony/mime": "^7.4|^8.0",
"symfony/process": "^7.4|^8.0",
"symfony/stopwatch": "^7.4|^8.0",
"symfony/uid": "^7.4|^8.0",
"symfony/validator": "^7.4|^8.0",
"symfony/var-dumper": "^7.4|^8.0"
},
"type": "library",
@@ -1400,7 +1407,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v8.0.11"
"source": "https://github.com/symfony/console/tree/v8.1.0"
},
"funding": [
{
@@ -1420,7 +1427,7 @@
"type": "tidelift"
}
],
"time": "2026-05-13T12:07:53+00:00"
"time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -1495,20 +1502,21 @@
},
{
"name": "symfony/event-dispatcher",
"version": "v8.0.9",
"version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "0c3c1a17604c4dbbec4b93fe162c538482096e1f"
"reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0c3c1a17604c4dbbec4b93fe162c538482096e1f",
"reference": "0c3c1a17604c4dbbec4b93fe162c538482096e1f",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f249ae3f680958b6f1f9dd76e5747cf0695b4102",
"reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102",
"shasum": ""
},
"require": {
"php": ">=8.4",
"php": ">=8.4.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher-contracts": "^2.5|^3"
},
"conflict": {
@@ -1556,7 +1564,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v8.0.9"
"source": "https://github.com/symfony/event-dispatcher/tree/v8.1.0"
},
"funding": [
{
@@ -1576,7 +1584,7 @@
"type": "tidelift"
}
],
"time": "2026-04-18T13:51:42+00:00"
"time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -1660,20 +1668,21 @@
},
{
"name": "symfony/filesystem",
"version": "v8.0.11",
"version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "224db910898ce1317b892a9a1338f1f8f17eb7c7"
"reference": "99aec13b82b4967ec5088222c4a3ecca955949c2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/224db910898ce1317b892a9a1338f1f8f17eb7c7",
"reference": "224db910898ce1317b892a9a1338f1f8f17eb7c7",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/99aec13b82b4967ec5088222c4a3ecca955949c2",
"reference": "99aec13b82b4967ec5088222c4a3ecca955949c2",
"shasum": ""
},
"require": {
"php": ">=8.4",
"php": ">=8.4.1",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8"
},
@@ -1706,7 +1715,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v8.0.11"
"source": "https://github.com/symfony/filesystem/tree/v8.1.0"
},
"funding": [
{
@@ -1726,24 +1735,24 @@
"type": "tidelift"
}
],
"time": "2026-05-11T16:39:47+00:00"
"time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/finder",
"version": "v8.0.8",
"version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "8da41214757b87d97f181e3d14a4179286151007"
"reference": "58d2e767a66052c1487356f953445634a8194c64"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/8da41214757b87d97f181e3d14a4179286151007",
"reference": "8da41214757b87d97f181e3d14a4179286151007",
"url": "https://api.github.com/repos/symfony/finder/zipball/58d2e767a66052c1487356f953445634a8194c64",
"reference": "58d2e767a66052c1487356f953445634a8194c64",
"shasum": ""
},
"require": {
"php": ">=8.4"
"php": ">=8.4.1"
},
"require-dev": {
"symfony/filesystem": "^7.4|^8.0"
@@ -1774,7 +1783,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.8"
"source": "https://github.com/symfony/finder/tree/v8.1.0"
},
"funding": [
{
@@ -1794,24 +1803,24 @@
"type": "tidelift"
}
],
"time": "2026-03-30T15:14:47+00:00"
"time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v8.0.8",
"version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "b48bce0a70b914f6953dafbd10474df232ed4de8"
"reference": "88f9c561f678a02d54b897014049fa839e33ff82"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/b48bce0a70b914f6953dafbd10474df232ed4de8",
"reference": "b48bce0a70b914f6953dafbd10474df232ed4de8",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/88f9c561f678a02d54b897014049fa839e33ff82",
"reference": "88f9c561f678a02d54b897014049fa839e33ff82",
"shasum": ""
},
"require": {
"php": ">=8.4",
"php": ">=8.4.1",
"symfony/deprecation-contracts": "^2.5|^3"
},
"type": "library",
@@ -1845,7 +1854,7 @@
"options"
],
"support": {
"source": "https://github.com/symfony/options-resolver/tree/v8.0.8"
"source": "https://github.com/symfony/options-resolver/tree/v8.1.0"
},
"funding": [
{
@@ -1865,7 +1874,7 @@
"type": "tidelift"
}
],
"time": "2026-03-30T15:14:47+00:00"
"time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -1952,16 +1961,16 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.37.0",
"version": "v1.38.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "4864388bfbd3001ce88e234fab652acd91fdc57e"
"reference": "e9247d281d694a5120554d9afaf54e070e88a603"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/4864388bfbd3001ce88e234fab652acd91fdc57e",
"reference": "4864388bfbd3001ce88e234fab652acd91fdc57e",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603",
"reference": "e9247d281d694a5120554d9afaf54e070e88a603",
"shasum": ""
},
"require": {
@@ -2010,7 +2019,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.37.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1"
},
"funding": [
{
@@ -2030,20 +2039,20 @@
"type": "tidelift"
}
],
"time": "2026-04-26T13:13:48+00:00"
"time": "2026-05-26T05:58:03+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.37.0",
"version": "v1.38.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "3833d7255cc303546435cb650316bff708a1c75c"
"reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
"reference": "3833d7255cc303546435cb650316bff708a1c75c",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b",
"reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b",
"shasum": ""
},
"require": {
@@ -2095,7 +2104,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.37.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0"
},
"funding": [
{
@@ -2115,20 +2124,20 @@
"type": "tidelift"
}
],
"time": "2024-09-09T11:45:10+00:00"
"time": "2026-05-25T13:48:31+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.37.0",
"version": "v1.38.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315"
"reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315",
"reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
"reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
"shasum": ""
},
"require": {
@@ -2180,7 +2189,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.37.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2"
},
"funding": [
{
@@ -2200,7 +2209,7 @@
"type": "tidelift"
}
],
"time": "2026-04-10T17:25:58+00:00"
"time": "2026-05-27T06:59:30+00:00"
},
{
"name": "symfony/polyfill-php80",
@@ -2288,16 +2297,16 @@
},
{
"name": "symfony/polyfill-php81",
"version": "v1.37.0",
"version": "v1.38.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
"reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/6bfb9c766cacffbc8e118cb87217d08ed84e5cd7",
"reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7",
"shasum": ""
},
"require": {
@@ -2344,7 +2353,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.37.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.38.1"
},
"funding": [
{
@@ -2364,20 +2373,20 @@
"type": "tidelift"
}
],
"time": "2024-09-09T11:45:10+00:00"
"time": "2026-05-26T12:45:58+00:00"
},
{
"name": "symfony/polyfill-php84",
"version": "v1.37.0",
"version": "v1.38.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php84.git",
"reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06"
"reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06",
"reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06",
"url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
"reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
"shasum": ""
},
"require": {
@@ -2424,7 +2433,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php84/tree/v1.37.0"
"source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1"
},
"funding": [
{
@@ -2444,24 +2453,104 @@
"type": "tidelift"
}
],
"time": "2026-04-10T18:47:49+00:00"
"time": "2026-05-26T12:51:13+00:00"
},
{
"name": "symfony/process",
"version": "v8.0.11",
"name": "symfony/polyfill-php85",
"version": "v1.38.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "26d89e459f037d2873300605d0a07e7a8ef84db0"
"url": "https://github.com/symfony/polyfill-php85.git",
"reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/26d89e459f037d2873300605d0a07e7a8ef84db0",
"reference": "26d89e459f037d2873300605d0a07e7a8ef84db0",
"url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1",
"reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1",
"shasum": ""
},
"require": {
"php": ">=8.4"
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php85\\": ""
},
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2026-05-26T02:25:22+00:00"
},
{
"name": "symfony/process",
"version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/c4a9e58f235a6bf7f97ffbfedae2687353ac79e5",
"reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5",
"shasum": ""
},
"require": {
"php": ">=8.4.1"
},
"type": "library",
"autoload": {
@@ -2489,7 +2578,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/process/tree/v8.0.11"
"source": "https://github.com/symfony/process/tree/v8.1.0"
},
"funding": [
{
@@ -2509,7 +2598,7 @@
"type": "tidelift"
}
],
"time": "2026-05-11T16:56:32+00:00"
"time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/service-contracts",
@@ -2600,20 +2689,20 @@
},
{
"name": "symfony/stopwatch",
"version": "v8.0.8",
"version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
"reference": "85954ed72d5440ea4dc9a10b7e49e01df766ffa3"
"reference": "21c07b026905d596e8379caeb115d87aa479499d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/85954ed72d5440ea4dc9a10b7e49e01df766ffa3",
"reference": "85954ed72d5440ea4dc9a10b7e49e01df766ffa3",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/21c07b026905d596e8379caeb115d87aa479499d",
"reference": "21c07b026905d596e8379caeb115d87aa479499d",
"shasum": ""
},
"require": {
"php": ">=8.4",
"php": ">=8.4.1",
"symfony/service-contracts": "^2.5|^3"
},
"type": "library",
@@ -2642,7 +2731,7 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/stopwatch/tree/v8.0.8"
"source": "https://github.com/symfony/stopwatch/tree/v8.1.0"
},
"funding": [
{
@@ -2662,24 +2751,24 @@
"type": "tidelift"
}
],
"time": "2026-03-30T15:14:47+00:00"
"time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/string",
"version": "v8.0.11",
"version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "39be2ad058a3c0bd558edca23e65f009865d75ff"
"reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/39be2ad058a3c0bd558edca23e65f009865d75ff",
"reference": "39be2ad058a3c0bd558edca23e65f009865d75ff",
"url": "https://api.github.com/repos/symfony/string/zipball/afd5944f4005862d961efb85c8bbd5c523c4e3c9",
"reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9",
"shasum": ""
},
"require": {
"php": ">=8.4",
"php": ">=8.4.1",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-intl-grapheme": "^1.33",
"symfony/polyfill-intl-normalizer": "^1.0",
@@ -2732,7 +2821,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v8.0.11"
"source": "https://github.com/symfony/string/tree/v8.1.0"
},
"funding": [
{
@@ -2752,7 +2841,7 @@
"type": "tidelift"
}
],
"time": "2026-05-13T12:07:53+00:00"
"time": "2026-05-29T05:06:50+00:00"
}
],
"packages-dev": [],
+1 -1
View File
@@ -21,7 +21,7 @@ jobs:
discussions: write
runs-on: ubuntu-latest
steps:
- uses: JC5/lock-threads@v6.0.6
- uses: dessant/lock-threads@main
with:
issue-inactive-days: 21
pr-inactive-days: 21
+9 -8
View File
@@ -18,14 +18,14 @@ jobs:
steps:
- run: |
BODY=$(gh pr view $NUMBER --json body)
AUTHOR=$(gh pr view $NUMBER --json author)
# I used AI assistance for:
# - [ ] Code generation (e.g., when writing an implementation or fixing a bug)
# - [ ] Test/benchmark generation
# - [ ] Documentation (including examples)
# - [ ] Research and understanding
if [[ $AUTHOR == *"app/dependabot"* ]]; then
echo "Is dependabot, stop"
exit 0
fi
echo "Not dependabot!"
# $BODY must contain one of these four uses.
if [[ $BODY != *"Code generation"* &&
@@ -54,7 +54,8 @@ jobs:
echo "Triggered on AI disclosure missing."
exit 0
fi
echo "It has the disclosure"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.pull_request.number }}
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
+1
View File
@@ -4,6 +4,7 @@ Over time, many people have contributed to Firefly III. Their efforts are not al
Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution.
## 2026
- iaohkut
- tasnim0tantawi
- Joe Longendyke
- Daniel Holøien
@@ -87,8 +87,7 @@ final class BalanceController extends Controller
// get journals for entire period:
$this->collector
->setRange($queryParameters['start'], $queryParameters['end'])
$this->collector->setRange($queryParameters['start'], $queryParameters['end'])
->withAccountInformation()
->setXorAccounts($accounts)
->setTypes([
@@ -87,7 +87,7 @@ final class PurgeController extends Controller
Rule::whereUserId($user->id)->onlyTrashed()->forceDelete();
// notes (this will actually purge EVERYBODY's deleted notes)
Note::onlyTrashed()->forceDelete();
Note::query()->onlyTrashed()->forceDelete();
// recurring transactions
Recurrence::whereUserId($user->id)->onlyTrashed()->forceDelete();
@@ -158,10 +158,7 @@ final class TagController extends Controller
'currency_id' => (string) $foreignCurrencyId,
'currency_code' => $journal['foreign_currency_code'],
];
$response[$foreignKey]['difference'] = bcadd(
(string) $response[$foreignKey]['difference'],
Steam::positive($journal['foreign_amount'])
);
$response[$foreignKey]['difference'] = bcadd((string) $response[$foreignKey]['difference'], Steam::positive($journal['foreign_amount']));
$response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference'];
}
}
@@ -155,10 +155,7 @@ final class TagController extends Controller
'currency_id' => (string) $foreignCurrencyId,
'currency_code' => $journal['foreign_currency_code'],
];
$response[$foreignKey]['difference'] = bcadd(
(string) $response[$foreignKey]['difference'],
Steam::positive($journal['foreign_amount'])
);
$response[$foreignKey]['difference'] = bcadd((string) $response[$foreignKey]['difference'], Steam::positive($journal['foreign_amount']));
$response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference']; // intentional float
}
}
@@ -31,7 +31,7 @@ use FireflyIII\Enums\WebhookResponse;
use FireflyIII\Enums\WebhookTrigger;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Support\Binder\EitherConfigKey;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\ValidationException;
@@ -128,7 +128,7 @@ final class ConfigurationController extends Controller
$data = $request->getAll();
$shortName = str_replace('configuration.', '', $name);
FireflyConfig::set($shortName, $data['value']);
AppConfiguration::set($shortName, $data['value']);
// get updated config:
$newConfig = $this->getDynamicConfiguration();
@@ -148,17 +148,17 @@ final class ConfigurationController extends Controller
*/
private function getDynamicConfiguration(): array
{
$isDemoSite = FireflyConfig::get('is_demo_site', false);
$updateCheck = FireflyConfig::get('permission_update_check', -1);
$singleUser = FireflyConfig::get('single_user_mode', true);
$lastCheck = FireflyConfig::get('last_update_check', 1);
$enableExchangeRates = FireflyConfig::get('enable_exchange_rates', config('cer.enabled'));
$useRunningBalance = FireflyConfig::get('use_running_balance', true);
$enableExternalMap = FireflyConfig::get('enable_external_map', false);
$enableExternalRates = FireflyConfig::get('enable_external_rates', false);
$allowWebhooks = FireflyConfig::get('allow_webhooks', false);
$enableBatchProcessing = FireflyConfig::get('enable_batch_processing', false);
$validUrlProtocols = FireflyConfig::get('valid_url_protocols', config('firefly.valid_url_protocols'));
$isDemoSite = AppConfiguration::get('is_demo_site', false);
$updateCheck = AppConfiguration::get('permission_update_check', -1);
$singleUser = AppConfiguration::get('single_user_mode', true);
$lastCheck = AppConfiguration::get('last_update_check', 1);
$enableExchangeRates = AppConfiguration::get('enable_exchange_rates', config('cer.enabled'));
$useRunningBalance = AppConfiguration::get('use_running_balance', true);
$enableExternalMap = AppConfiguration::get('enable_external_map', false);
$enableExternalRates = AppConfiguration::get('enable_external_rates', false);
$allowWebhooks = AppConfiguration::get('allow_webhooks', false);
$enableBatchProcessing = AppConfiguration::get('enable_batch_processing', false);
$validUrlProtocols = AppConfiguration::get('valid_url_protocols', config('firefly.valid_url_protocols'));
return [
'is_demo_site' => $isDemoSite?->data,
@@ -26,7 +26,7 @@ namespace FireflyIII\Api\V1\Controllers\System;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\System\CronRequest;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\Http\Controllers\CronRunner;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Log;
@@ -51,7 +51,7 @@ final class CronController extends Controller
$return = [];
$return['recurring_transactions'] = $this->runRecurring($config['force'], $config['date']);
$return['auto_budgets'] = $this->runAutoBudget($config['force'], $config['date']);
if (true === FireflyConfig::get('enable_external_rates', config('cer.download_enabled'))->data) {
if (true === AppConfiguration::get('enable_external_rates', config('cer.download_enabled'))->data) {
$return['exchange_rates'] = $this->exchangeRatesCronJob($config['force'], $config['date']);
}
$return['bill_notifications'] = $this->billWarningCronJob($config['force'], $config['date']);
@@ -30,7 +30,7 @@ use FireflyIII\Models\Webhook;
use FireflyIII\Models\WebhookAttempt;
use FireflyIII\Models\WebhookMessage;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Transformers\WebhookAttemptTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Pagination\LengthAwarePaginator;
@@ -71,7 +71,7 @@ final class AttemptController extends Controller
if ($message->webhook_id !== $webhook->id) {
throw new FireflyException('200040: Webhook and webhook message are no match');
}
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->warning(sprintf(
'User lists webhook attempts of webhook #%d and message #%d, but webhooks are DISABLED.',
$webhook->id,
@@ -119,7 +119,7 @@ final class AttemptController extends Controller
throw new FireflyException('200041: Webhook message and webhook attempt are no match');
}
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->warning(sprintf(
'User views single webhook attempt #%d of webhook #%d and message #%d, but webhooks are DISABLED',
$attempt->id,
@@ -30,7 +30,7 @@ use FireflyIII\Models\Webhook;
use FireflyIII\Models\WebhookAttempt;
use FireflyIII\Models\WebhookMessage;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\Facades\Preferences;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Log;
@@ -62,7 +62,7 @@ final class DestroyController extends Controller
*/
public function destroy(Webhook $webhook): JsonResponse
{
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->warning(sprintf('User tries to destroy webhook #%d. but webhooks are DISABLED.', $webhook->id));
throw new NotFoundHttpException('Webhooks are not enabled.');
@@ -92,7 +92,7 @@ final class DestroyController extends Controller
throw new FireflyException('200041: Webhook message and webhook attempt are no match');
}
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->warning(sprintf(
'User tries to destroy webhook #%d, message #%d, attempt #%d, but webhooks are DISABLED.',
$webhook->id,
@@ -125,7 +125,7 @@ final class DestroyController extends Controller
throw new FireflyException('200040: Webhook and webhook message are no match');
}
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->warning(sprintf('User tries to destroy webhook #%d, message #%d, but webhooks are DISABLED.', $webhook->id, $message->id));
throw new NotFoundHttpException('Webhooks are not enabled.');
@@ -29,7 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Webhook;
use FireflyIII\Models\WebhookMessage;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Transformers\WebhookMessageTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Pagination\LengthAwarePaginator;
@@ -65,7 +65,7 @@ final class MessageController extends Controller
*/
public function index(Webhook $webhook): JsonResponse
{
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->warning(sprintf('User tries to view messages of webhook #%d, but webhooks are DISABLED.', $webhook->id));
throw new NotFoundHttpException('Webhooks are not enabled.');
@@ -105,7 +105,7 @@ final class MessageController extends Controller
if ($message->webhook_id !== $webhook->id) {
throw new FireflyException('200040: Webhook and webhook message are no match');
}
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->warning(sprintf('User tries to view message #%d of webhook #%d, but webhooks are DISABLED.', $message->id, $webhook->id));
throw new NotFoundHttpException('Webhooks are not enabled.');
@@ -31,7 +31,7 @@ use FireflyIII\Generator\Webhook\MessageGeneratorInterface;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\Webhook;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\JsonApi\Enrichments\WebhookEnrichment;
use FireflyIII\Transformers\WebhookTransformer;
use FireflyIII\User;
@@ -72,7 +72,7 @@ final class ShowController extends Controller
*/
public function index(): JsonResponse
{
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->info('User tries to view all webhooks, but webhooks are DISABLED.');
throw new NotFoundHttpException('Webhooks are not enabled.');
@@ -114,7 +114,7 @@ final class ShowController extends Controller
*/
public function show(Webhook $webhook): JsonResponse
{
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->info(sprintf('User tries to view webhook #%d, but webhooks are DISABLED.', $webhook->id));
throw new NotFoundHttpException('Webhooks are not enabled.');
@@ -146,7 +146,7 @@ final class ShowController extends Controller
*/
public function triggerTransaction(Webhook $webhook, TransactionGroup $group): JsonResponse
{
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->info(sprintf(
'User tries to trigger webhook #%d on transaction group #%d, but webhooks are DISABLED.',
$webhook->id,
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Webhook;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Models\Webhook\CreateRequest;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\JsonApi\Enrichments\WebhookEnrichment;
use FireflyIII\Transformers\WebhookTransformer;
use FireflyIII\User;
@@ -63,7 +63,7 @@ final class StoreController extends Controller
public function store(CreateRequest $request): JsonResponse
{
$data = $request->getData();
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->info('User tries to store new webhook, but webhooks are DISABLED.', $data);
throw new NotFoundHttpException('Webhooks are not enabled.');
@@ -28,7 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Jobs\SendWebhookMessage;
use FireflyIII\Models\Webhook;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Log;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
@@ -57,7 +57,7 @@ final class SubmitController extends Controller
*/
public function submit(Webhook $webhook): JsonResponse
{
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->info(sprintf('User tries to submit webhook #%d, but webhooks are DISABLED.', $webhook->id));
throw new NotFoundHttpException('Webhooks are not enabled.');
@@ -28,7 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Models\Webhook\UpdateRequest;
use FireflyIII\Models\Webhook;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\JsonApi\Enrichments\WebhookEnrichment;
use FireflyIII\Transformers\WebhookTransformer;
use FireflyIII\User;
@@ -62,7 +62,7 @@ final class UpdateController extends Controller
public function update(Webhook $webhook, UpdateRequest $request): JsonResponse
{
$data = $request->getData();
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
if (false === AppConfiguration::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {
Log::channel('audit')->info(sprintf('User tries to update webhook #%d, but webhooks are DISABLED.', $webhook->id), $data);
throw new NotFoundHttpException('Webhooks are not enabled.');
@@ -59,6 +59,6 @@ class AutocompleteRequest extends FormRequest
public function rules(): array
{
return ['date' => 'date|after:1970-01-02|before:2038-01-17'];
return ['date' => ['date', 'after:1970-01-02', 'before:2038-01-17']];
}
}
+3 -3
View File
@@ -60,11 +60,11 @@ class ChartRequest extends FormRequest
public function rules(): array
{
return [
'start' => 'required|date|after:1970-01-02|before:2038-01-17|before_or_equal:end',
'end' => 'required|date|after:1970-01-02|before:2038-01-17|after_or_equal:start',
'start' => ['required', 'date', 'after:1970-01-02', 'before:2038-01-17', 'before_or_equal:end'],
'end' => ['required', 'date', 'after:1970-01-02', 'before:2038-01-17', 'after_or_equal:start'],
'preselected' => sprintf('nullable|in:%s', implode(',', config('firefly.preselected_accounts'))),
'period' => sprintf('nullable|in:%s', implode(',', config('firefly.valid_view_ranges'))),
'accounts' => 'nullable|array',
'accounts' => ['nullable', 'array'],
'accounts.*' => 'exists:accounts,id',
];
}
@@ -46,14 +46,11 @@ class MoveTransactionsRequest extends FormRequest
return ['original_account' => $this->convertInteger('original_account'), 'destination_account' => $this->convertInteger('destination_account')];
}
/**
* @return string[]
*/
public function rules(): array
{
return [
'original_account' => 'required|different:destination_account|belongsToUser:accounts,id',
'destination_account' => 'required|different:original_account|belongsToUser:accounts,id',
'original_account' => ['required', 'different:destination_account', 'belongsToUser:accounts,id'],
'destination_account' => ['required', 'different:original_account', 'belongsToUser:accounts,id'],
];
}
@@ -72,6 +72,6 @@ class ExportRequest extends FormRequest
*/
public function rules(): array
{
return ['type' => 'in:csv', 'accounts' => 'min:1|max:32768', 'start' => 'date|before:end', 'end' => 'date|after:start'];
return ['type' => 'in:csv', 'accounts' => ['min:1', 'max:32768'], 'start' => ['date', 'before:end'], 'end' => ['date', 'after:start']];
}
}
+1 -1
View File
@@ -55,6 +55,6 @@ class SameDateRequest extends FormRequest
*/
public function rules(): array
{
return ['start' => 'required|date', 'end' => 'required|date|after_or_equal:start'];
return ['start' => ['required', 'date'], 'end' => ['required', 'date', 'after_or_equal:start']];
}
}
@@ -56,6 +56,6 @@ class SingleDateRequest extends FormRequest
*/
public function rules(): array
{
return ['date' => 'required|date|after:1970-01-02|before:2038-01-17'];
return ['date' => ['required', 'date', 'after:1970-01-02', 'before:2038-01-17']];
}
}
@@ -169,7 +169,7 @@ class GenericRequest extends FormRequest
$this->bills = new Collection();
$this->tags = new Collection();
return ['start' => 'required|date', 'end' => 'required|date|after_or_equal:start'];
return ['start' => ['required', 'date'], 'end' => ['required', 'date', 'after_or_equal:start']];
}
private function parseAccounts(): void
@@ -99,29 +99,29 @@ class StoreRequest extends FormRequest
$ccPaymentTypes = implode(',', array_keys(config('firefly.ccTypes')));
$type = $this->convertString('type');
$rules = [
'name' => 'required|max:1024|min:1|uniqueAccountForUser',
'name' => ['required', 'max:1024', 'min:1', 'uniqueAccountForUser'],
'type' => sprintf('required|max:1024|min:1|in:%s', $types),
'iban' => ['iban', 'nullable', new UniqueIban(null, $type)],
'bic' => 'bic|nullable',
'bic' => ['bic', 'nullable'],
'account_number' => ['min:1', 'max:255', 'nullable', new UniqueAccountNumber(null, $type)],
'opening_balance' => 'numeric|required_with:opening_balance_date|nullable',
'opening_balance_date' => 'date|required_with:opening_balance|nullable',
'virtual_balance' => 'numeric|nullable',
'order' => 'numeric|nullable',
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:3|exists:transaction_currencies,code',
'opening_balance' => ['numeric', 'required_with:opening_balance_date', 'nullable'],
'opening_balance_date' => ['date', 'required_with:opening_balance', 'nullable'],
'virtual_balance' => ['numeric', 'nullable'],
'order' => ['numeric', 'nullable'],
'currency_id' => ['numeric', 'exists:transaction_currencies,id'],
'currency_code' => ['min:3', 'max:3', 'exists:transaction_currencies,code'],
'active' => [new IsBoolean()],
'include_net_worth' => [new IsBoolean()],
'account_role' => sprintf('nullable|in:%s|required_if:type,asset', $accountRoles),
'credit_card_type' => sprintf('nullable|in:%s|required_if:account_role,ccAsset', $ccPaymentTypes),
'monthly_payment_date' => 'nullable|date|required_if:account_role,ccAsset|required_if:credit_card_type,monthlyFull',
'liability_type' => 'nullable|required_if:type,liability|required_if:type,liabilities|in:loan,debt,mortgage',
'monthly_payment_date' => ['nullable', 'date', 'required_if:account_role,ccAsset', 'required_if:credit_card_type,monthlyFull'],
'liability_type' => ['nullable', 'required_if:type,liability', 'required_if:type,liabilities', 'in:loan,debt,mortgage'],
'liability_amount' => ['required_with:liability_start_date', new IsValidPositiveAmount()],
'liability_start_date' => 'required_with:liability_amount|date',
'liability_direction' => 'nullable|required_if:type,liability|required_if:type,liabilities|in:credit,debit',
'interest' => 'min:0|max:100|numeric',
'liability_start_date' => ['required_with:liability_amount', 'date'],
'liability_direction' => ['nullable', 'required_if:type,liability', 'required_if:type,liabilities', 'in:credit,debit'],
'interest' => ['min:0', 'max:100', 'numeric'],
'interest_period' => sprintf('nullable|in:%s', implode(',', config('firefly.interest_periods'))),
'notes' => 'min:0|max:32768',
'notes' => ['min:0', 'max:32768'],
];
return Location::requestRules($rules);
@@ -95,24 +95,24 @@ class UpdateRequest extends FormRequest
'name' => sprintf('min:1|max:1024|uniqueAccountForUser:%d', $account->id),
'type' => sprintf('in:%s', $types),
'iban' => ['iban', 'nullable', new UniqueIban($account, $this->convertString('type'))],
'bic' => 'bic|nullable',
'bic' => ['bic', 'nullable'],
'account_number' => ['min:1', 'max:255', 'nullable', new UniqueAccountNumber($account, $this->convertString('type'))],
'opening_balance' => 'numeric|required_with:opening_balance_date|nullable',
'opening_balance_date' => 'date|required_with:opening_balance|nullable',
'virtual_balance' => 'numeric|nullable',
'order' => 'numeric|nullable',
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:51|exists:transaction_currencies,code',
'opening_balance' => ['numeric', 'required_with:opening_balance_date', 'nullable'],
'opening_balance_date' => ['date', 'required_with:opening_balance', 'nullable'],
'virtual_balance' => ['numeric', 'nullable'],
'order' => ['numeric', 'nullable'],
'currency_id' => ['numeric', 'exists:transaction_currencies,id'],
'currency_code' => ['min:3', 'max:51', 'exists:transaction_currencies,code'],
'active' => [new IsBoolean()],
'include_net_worth' => [new IsBoolean()],
'account_role' => sprintf('in:%s|nullable|required_if:type,asset', $accountRoles),
'credit_card_type' => sprintf('in:%s|nullable|required_if:account_role,ccAsset', $ccPaymentTypes),
'monthly_payment_date' => 'date|nullable|required_if:account_role,ccAsset|required_if:credit_card_type,monthlyFull',
'liability_type' => 'required_if:type,liability|in:loan,debt,mortgage',
'liability_direction' => 'required_if:type,liability|in:credit,debit',
'interest' => 'required_if:type,liability|min:0|max:100|numeric',
'interest_period' => 'required_if:type,liability|in:daily,monthly,yearly',
'notes' => 'min:0|max:32768',
'monthly_payment_date' => ['date', 'nullable', 'required_if:account_role,ccAsset', 'required_if:credit_card_type,monthlyFull'],
'liability_type' => ['required_if:type,liability', 'in:loan,debt,mortgage'],
'liability_direction' => ['required_if:type,liability', 'in:credit,debit'],
'interest' => ['required_if:type,liability', 'min:0', 'max:100', 'numeric'],
'interest_period' => ['required_if:type,liability', 'in:daily,monthly,yearly'],
'notes' => ['min:0', 'max:32768'],
];
return Location::requestRules($rules);
@@ -64,9 +64,9 @@ class StoreRequest extends FormRequest
$model = $this->convertString('attachable_type');
return [
'filename' => 'required|min:1|max:255',
'filename' => ['required', 'min:1', 'max:255'],
'title' => ['min:1', 'max:255'],
'notes' => 'min:1|max:32768',
'notes' => ['min:1', 'max:32768'],
'attachable_type' => sprintf('required|in:%s', $models),
'attachable_id' => ['required', 'numeric', new IsValidAttachmentModel($model)],
];
@@ -68,7 +68,7 @@ class UpdateRequest extends FormRequest
return [
'filename' => ['min:1', 'max:255'],
'title' => ['min:1', 'max:255'],
'notes' => 'min:1|max:32768',
'notes' => ['min:1', 'max:32768'],
'attachable_type' => sprintf('in:%s', $models),
'attachable_id' => ['numeric', new IsValidAttachmentModel($model)],
];
@@ -65,11 +65,11 @@ class Request extends FormRequest
public function rules(): array
{
return [
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:51|exists:transaction_currencies,code',
'currency_id' => ['numeric', 'exists:transaction_currencies,id'],
'currency_code' => ['min:3', 'max:51', 'exists:transaction_currencies,code'],
'amount' => ['nullable', new IsValidPositiveAmount()],
'start' => 'date|after:1970-01-02|before:2038-01-17',
'end' => 'date|after:1970-01-02|before:2038-01-17',
'start' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
'end' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
];
}
@@ -77,18 +77,18 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'name' => 'min:1|max:255|uniqueObjectForUser:bills,name',
'name' => ['min:1', 'max:255', 'uniqueObjectForUser:bills,name'],
'amount_min' => ['required', new IsValidPositiveAmount()],
'amount_max' => ['required', new IsValidPositiveAmount()],
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:51|exists:transaction_currencies,code',
'date' => 'date|required|after:1970-01-02|before:2038-01-17',
'end_date' => 'nullable|date|after:date|after:1970-01-02|before:2038-01-17',
'extension_date' => 'nullable|date|after:date|after:1970-01-02|before:2038-01-17',
'repeat_freq' => 'in:weekly,monthly,quarterly,half-year,yearly|required',
'skip' => 'min:0|max:31|numeric',
'currency_id' => ['numeric', 'exists:transaction_currencies,id'],
'currency_code' => ['min:3', 'max:51', 'exists:transaction_currencies,code'],
'date' => ['date', 'required', 'after:1970-01-02', 'before:2038-01-17'],
'end_date' => ['nullable', 'date', 'after:date', 'after:1970-01-02', 'before:2038-01-17'],
'extension_date' => ['nullable', 'date', 'after:date', 'after:1970-01-02', 'before:2038-01-17'],
'repeat_freq' => ['in:weekly,monthly,quarterly,half-year,yearly', 'required'],
'skip' => ['min:0', 'max:31', 'numeric'],
'active' => [new IsBoolean()],
'notes' => 'nullable|min:1|max:32768',
'notes' => ['nullable', 'min:1', 'max:32768'],
];
}
@@ -81,15 +81,15 @@ class UpdateRequest extends FormRequest
'name' => sprintf('min:1|max:255|uniqueObjectForUser:bills,name,%d', $bill->id),
'amount_min' => ['nullable', new IsValidPositiveAmount()],
'amount_max' => ['nullable', new IsValidPositiveAmount()],
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:51|exists:transaction_currencies,code',
'date' => 'date|after:1970-01-02|before:2038-01-17',
'end_date' => 'date|after:date|after:1970-01-02|before:2038-01-17',
'extension_date' => 'date|after:date|after:1970-01-02|before:2038-01-17',
'currency_id' => ['numeric', 'exists:transaction_currencies,id'],
'currency_code' => ['min:3', 'max:51', 'exists:transaction_currencies,code'],
'date' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
'end_date' => ['date', 'after:date', 'after:1970-01-02', 'before:2038-01-17'],
'extension_date' => ['date', 'after:date', 'after:1970-01-02', 'before:2038-01-17'],
'repeat_freq' => 'in:weekly,monthly,quarterly,half-year,yearly',
'skip' => 'min:0|max:31|numeric',
'skip' => ['min:0', 'max:31', 'numeric'],
'active' => [new IsBoolean()],
'notes' => 'min:1|max:32768',
'notes' => ['min:1', 'max:32768'],
];
}
@@ -75,11 +75,11 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'name' => 'required|min:1|max:255|uniqueObjectForUser:budgets,name',
'name' => ['required', 'min:1', 'max:255', 'uniqueObjectForUser:budgets,name'],
'active' => [new IsBoolean()],
'currency_id' => 'exists:transaction_currencies,id',
'currency_code' => 'exists:transaction_currencies,code',
'notes' => 'nullable|min:1|max:32768',
'notes' => ['nullable', 'min:1', 'max:32768'],
// auto budget info
'auto_budget_type' => 'in:reset,rollover,adjusted,none',
'auto_budget_amount' => [
@@ -88,7 +88,12 @@ class StoreRequest extends FormRequest
'required_if:auto_budget_type,adjusted',
new IsValidPositiveAmount(),
],
'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly|required_if:auto_budget_type,reset|required_if:auto_budget_type,rollover|required_if:auto_budget_type,adjusted',
'auto_budget_period' => [
'in:daily,weekly,monthly,quarterly,half_year,yearly',
'required_if:auto_budget_type,reset',
'required_if:auto_budget_type,rollover',
'required_if:auto_budget_type,adjusted',
],
// webhooks
'fire_webhooks' => [new IsBoolean()],
@@ -85,7 +85,7 @@ class UpdateRequest extends FormRequest
return [
'name' => sprintf('min:1|max:100|uniqueObjectForUser:budgets,name,%d', $budget->id),
'active' => [new IsBoolean()],
'notes' => 'nullable|min:1|max:32768',
'notes' => ['nullable', 'min:1', 'max:32768'],
'auto_budget_type' => 'in:reset,rollover,adjusted,none',
'auto_budget_currency_id' => 'exists:transaction_currencies,id',
'auto_budget_currency_code' => 'exists:transaction_currencies,code',
@@ -71,12 +71,12 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'start' => 'required|before:end|date',
'end' => 'required|after:start|date',
'start' => ['required', 'before:end', 'date'],
'end' => ['required', 'after:start', 'date'],
'amount' => ['required', new IsValidPositiveAmount()],
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:51|exists:transaction_currencies,code',
'notes' => 'nullable|min:0|max:32768',
'currency_id' => ['numeric', 'exists:transaction_currencies,id'],
'currency_code' => ['min:3', 'max:51', 'exists:transaction_currencies,code'],
'notes' => ['nullable', 'min:0', 'max:32768'],
// webhooks
'fire_webhooks' => [new IsBoolean()],
@@ -73,12 +73,12 @@ class UpdateRequest extends FormRequest
public function rules(): array
{
return [
'start' => 'date|after:1970-01-02|before:2038-01-17',
'end' => 'date|after:1970-01-02|before:2038-01-17',
'start' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
'end' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
'amount' => ['nullable', new IsValidPositiveAmount()],
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:51|exists:transaction_currencies,code',
'notes' => 'nullable|min:0|max:32768',
'currency_id' => ['numeric', 'exists:transaction_currencies,id'],
'currency_code' => ['min:3', 'max:51', 'exists:transaction_currencies,code'],
'notes' => ['nullable', 'min:0', 'max:32768'],
// webhooks
'fire_webhooks' => [new IsBoolean()],
@@ -51,6 +51,6 @@ class StoreRequest extends FormRequest
*/
public function rules(): array
{
return ['name' => 'required|min:1|max:100|uniqueObjectForUser:categories,name'];
return ['name' => ['required', 'min:1', 'max:100', 'uniqueObjectForUser:categories,name']];
}
}
@@ -48,7 +48,7 @@ class StoreByCurrenciesRequest extends FormRequest
*/
public function rules(): array
{
return ['*' => 'required|numeric|min:0.0000000001'];
return ['*' => ['required', 'numeric', 'min:0.0000000001']];
}
public function withValidator(Validator $validator): void
@@ -54,12 +54,14 @@ class StoreByDateRequest extends FormRequest
/**
* The rules that the incoming request must be matched against.
*
* @return array<string, string>
*/
public function rules(): array
{
return ['from' => 'required|exists:transaction_currencies,code', 'rates' => 'required|array', 'rates.*' => 'required|numeric|min:0.0000000001'];
return [
'from' => ['required', 'exists:transaction_currencies,code'],
'rates' => ['required', 'array'],
'rates.*' => ['required', 'numeric', 'min:0.0000000001'],
];
}
public function withValidator(Validator $validator): void
@@ -64,10 +64,10 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'date' => 'required|date|after:1970-01-02|before:2038-01-17',
'rate' => 'required|numeric|gt:0',
'from' => 'required|exists:transaction_currencies,code',
'to' => 'required|exists:transaction_currencies,code',
'date' => ['required', 'date', 'after:1970-01-02', 'before:2038-01-17'],
'rate' => ['required', 'numeric', 'gt:0'],
'from' => ['required', 'exists:transaction_currencies,code'],
'to' => ['required', 'exists:transaction_currencies,code'],
];
}
}
@@ -52,10 +52,10 @@ class UpdateRequest extends FormRequest
public function rules(): array
{
return [
'date' => 'date|after:1970-01-02|before:2038-01-17',
'rate' => 'required|numeric|gt:0',
'from' => 'nullable|exists:transaction_currencies,code',
'to' => 'nullable|exists:transaction_currencies,code',
'date' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
'rate' => ['required', 'numeric', 'gt:0'],
'from' => ['nullable', 'exists:transaction_currencies,code'],
'to' => ['nullable', 'exists:transaction_currencies,code'],
];
}
}
@@ -71,18 +71,18 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'name' => 'required|min:1|max:255|uniquePiggyBankForUser',
'name' => ['required', 'min:1', 'max:255', 'uniquePiggyBankForUser'],
'accounts' => 'required',
'accounts.*' => 'array|required',
'accounts.*.account_id' => 'required|numeric|belongsToUser:accounts,id',
'accounts.*' => ['array', 'required'],
'accounts.*.account_id' => ['required', 'numeric', 'belongsToUser:accounts,id'],
'accounts.*.current_amount' => ['numeric', new IsValidZeroOrMoreAmount()],
'object_group_id' => 'numeric|belongsToUser:object_groups,id',
'object_group_id' => ['numeric', 'belongsToUser:object_groups,id'],
'object_group_title' => ['min:1', 'max:255'],
'target_amount' => ['required', new IsValidZeroOrMoreAmount()],
'start_date' => 'required|date|after:1970-01-01|before:2038-01-17',
'transaction_currency_id' => 'exists:transaction_currencies,id|required_without:transaction_currency_code',
'transaction_currency_code' => 'exists:transaction_currencies,code|required_without:transaction_currency_id',
'target_date' => 'date|nullable|after:start_date',
'start_date' => ['required', 'date', 'after:1970-01-01', 'before:2038-01-17'],
'transaction_currency_id' => ['exists:transaction_currencies,id', 'required_without:transaction_currency_code'],
'transaction_currency_code' => ['exists:transaction_currencies,code', 'required_without:transaction_currency_id'],
'target_date' => ['date', 'nullable', 'after:start_date'],
'notes' => 'max:65000',
];
}
@@ -79,17 +79,17 @@ class UpdateRequest extends FormRequest
'name' => 'min:1|max:255|uniquePiggyBankForUser:'.$piggyBank->id,
'current_amount' => ['nullable', new LessThanPiggyTarget(), new IsValidPositiveAmount()],
'target_amount' => ['nullable', new IsValidZeroOrMoreAmount()],
'start_date' => 'date|nullable',
'target_date' => 'date|nullable|after:start_date',
'start_date' => ['date', 'nullable'],
'target_date' => ['date', 'nullable', 'after:start_date'],
'notes' => 'max:65000',
'accounts' => 'array',
'accounts.*' => 'array',
'accounts.*.account_id' => ['required', 'numeric', 'belongsToUser:accounts,id'],
'accounts.*.current_amount' => ['numeric', 'nullable', new IsValidZeroOrMoreAmount(true), new IsEnoughInAccounts($piggyBank, $this->getAll())],
'object_group_id' => 'numeric|belongsToUser:object_groups,id',
'object_group_id' => ['numeric', 'belongsToUser:object_groups,id'],
'object_group_title' => ['min:1', 'max:255'],
'transaction_currency_id' => 'exists:transaction_currencies,id|nullable',
'transaction_currency_code' => 'exists:transaction_currencies,code|nullable',
'transaction_currency_id' => ['exists:transaction_currencies,id', 'nullable'],
'transaction_currency_code' => ['exists:transaction_currencies,code', 'nullable'],
];
}
}
@@ -78,40 +78,40 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'type' => 'required|in:withdrawal,transfer,deposit',
'title' => 'required|min:1|max:255|uniqueObjectForUser:recurrences,title',
'description' => 'min:1|max:32768',
'first_date' => 'required|date',
'type' => ['required', 'in:withdrawal,transfer,deposit'],
'title' => ['required', 'min:1', 'max:255', 'uniqueObjectForUser:recurrences,title'],
'description' => ['min:1', 'max:32768'],
'first_date' => ['required', 'date'],
'apply_rules' => [new IsBoolean()],
'active' => [new IsBoolean()],
'repeat_until' => 'nullable|date',
'nr_of_repetitions' => 'nullable|numeric|min:1|max:31',
'repeat_until' => ['nullable', 'date'],
'nr_of_repetitions' => ['nullable', 'numeric', 'min:1', 'max:255'],
'repetitions.*.type' => 'required|in:daily,weekly,ndom,monthly,yearly',
'repetitions.*.moment' => 'min:0|max:10',
'repetitions.*.skip' => 'nullable|numeric|min:0|max:31',
'repetitions.*.weekend' => 'numeric|min:1|max:4',
'repetitions.*.type' => ['required', 'in:daily,weekly,ndom,monthly,yearly'],
'repetitions.*.moment' => ['min:0', 'max:10'],
'repetitions.*.skip' => ['nullable', 'numeric', 'min:0', 'max:31'],
'repetitions.*.weekend' => ['numeric', 'min:1', 'max:4'],
'transactions.*.description' => 'required|min:1|max:255',
'transactions.*.description' => ['required', 'min:1', 'max:255'],
'transactions.*.amount' => ['required', new IsValidPositiveAmount()],
'transactions.*.foreign_amount' => ['nullable', new IsValidPositiveAmount()],
'transactions.*.currency_id' => 'nullable|numeric|exists:transaction_currencies,id',
'transactions.*.currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code',
'transactions.*.foreign_currency_id' => 'nullable|numeric|exists:transaction_currencies,id',
'transactions.*.foreign_currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code',
'transactions.*.currency_id' => ['nullable', 'numeric', 'exists:transaction_currencies,id'],
'transactions.*.currency_code' => ['nullable', 'min:3', 'max:51', 'exists:transaction_currencies,code'],
'transactions.*.foreign_currency_id' => ['nullable', 'numeric', 'exists:transaction_currencies,id'],
'transactions.*.foreign_currency_code' => ['nullable', 'min:3', 'max:51', 'exists:transaction_currencies,code'],
'transactions.*.source_id' => ['numeric', 'nullable', new BelongsUser()],
'transactions.*.source_name' => 'min:1|max:255|nullable',
'transactions.*.source_name' => ['min:1', 'max:255', 'nullable'],
'transactions.*.destination_id' => ['numeric', 'nullable', new BelongsUser()],
'transactions.*.destination_name' => 'min:1|max:255|nullable',
'transactions.*.destination_name' => ['min:1', 'max:255', 'nullable'],
// new and updated fields:
'transactions.*.budget_id' => ['nullable', 'mustExist:budgets,id', new BelongsUser()],
'transactions.*.budget_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()],
'transactions.*.category_id' => ['nullable', 'mustExist:categories,id', new BelongsUser()],
'transactions.*.category_name' => 'min:1|max:255|nullable',
'transactions.*.category_name' => ['min:1', 'max:255', 'nullable'],
'transactions.*.piggy_bank_id' => ['nullable', 'numeric', 'mustExist:piggy_banks,id', new BelongsUser()],
'transactions.*.piggy_bank_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()],
'transactions.*.tags' => 'nullable|min:1|max:255',
'transactions.*.tags' => ['nullable', 'min:1', 'max:255'],
];
}
@@ -89,38 +89,38 @@ class UpdateRequest extends FormRequest
return [
'title' => sprintf('min:1|max:255|uniqueObjectForUser:recurrences,title,%d', $recurrence->id),
'description' => 'min:1|max:32768',
'first_date' => 'date|after:1970-01-02|before:2038-01-17',
'description' => ['min:1', 'max:32768'],
'first_date' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
'apply_rules' => [new IsBoolean()],
'active' => [new IsBoolean()],
'repeat_until' => 'nullable|date',
'nr_of_repetitions' => 'nullable|numeric|min:1|max:31',
'repeat_until' => ['nullable', 'date'],
'nr_of_repetitions' => ['nullable', 'numeric', 'min:1', 'max:255'],
'repetitions.*.type' => 'in:daily,weekly,ndom,monthly,yearly',
'repetitions.*.moment' => 'min:0|max:10|numeric',
'repetitions.*.skip' => 'nullable|numeric|min:0|max:31',
'repetitions.*.weekend' => 'nullable|numeric|min:1|max:4',
'repetitions.*.moment' => ['min:0', 'max:10', 'numeric'],
'repetitions.*.skip' => ['nullable', 'numeric', 'min:0', 'max:31'],
'repetitions.*.weekend' => ['nullable', 'numeric', 'min:1', 'max:4'],
'transactions.*.description' => ['min:1', 'max:255'],
'transactions.*.amount' => [new IsValidPositiveAmount()],
'transactions.*.foreign_amount' => ['nullable', new IsValidPositiveAmount()],
'transactions.*.currency_id' => 'nullable|numeric|exists:transaction_currencies,id',
'transactions.*.currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code',
'transactions.*.foreign_currency_id' => 'nullable|numeric|exists:transaction_currencies,id',
'transactions.*.foreign_currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code',
'transactions.*.currency_id' => ['nullable', 'numeric', 'exists:transaction_currencies,id'],
'transactions.*.currency_code' => ['nullable', 'min:3', 'max:51', 'exists:transaction_currencies,code'],
'transactions.*.foreign_currency_id' => ['nullable', 'numeric', 'exists:transaction_currencies,id'],
'transactions.*.foreign_currency_code' => ['nullable', 'min:3', 'max:51', 'exists:transaction_currencies,code'],
'transactions.*.source_id' => ['numeric', 'nullable', new BelongsUser()],
'transactions.*.source_name' => 'min:1|max:255|nullable',
'transactions.*.source_name' => ['min:1', 'max:255', 'nullable'],
'transactions.*.destination_id' => ['numeric', 'nullable', new BelongsUser()],
'transactions.*.destination_name' => 'min:1|max:255|nullable',
'transactions.*.destination_name' => ['min:1', 'max:255', 'nullable'],
// new and updated fields:
'transactions.*.budget_id' => ['nullable', 'mustExist:budgets,id', new BelongsUser()],
'transactions.*.budget_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()],
'transactions.*.category_id' => ['nullable', 'mustExist:categories,id', new BelongsUser()],
'transactions.*.category_name' => 'min:1|max:255|nullable',
'transactions.*.category_name' => ['min:1', 'max:255', 'nullable'],
'transactions.*.piggy_bank_id' => ['nullable', 'numeric', 'mustExist:piggy_banks,id', new BelongsUser()],
'transactions.*.piggy_bank_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()],
'transactions.*.tags' => 'nullable|min:1|max:255',
'transactions.*.tags' => ['nullable', 'min:1', 'max:255'],
];
}
@@ -80,11 +80,11 @@ class StoreRequest extends FormRequest
$contextActions = implode(',', config('firefly.context-rule-actions'));
return [
'title' => 'required|min:1|max:100|uniqueObjectForUser:rules,title',
'description' => 'min:1|max:32768|nullable',
'rule_group_id' => 'belongsToUser:rule_groups|required_without:rule_group_title',
'rule_group_title' => 'nullable|min:1|max:255|required_without:rule_group_id|belongsToUser:rule_groups,title',
'trigger' => 'required|in:store-journal,update-journal,manual-activation',
'title' => ['required', 'min:1', 'max:100', 'uniqueObjectForUser:rules,title'],
'description' => ['min:1', 'max:32768', 'nullable'],
'rule_group_id' => ['belongsToUser:rule_groups', 'required_without:rule_group_title'],
'rule_group_title' => ['nullable', 'min:1', 'max:255', 'required_without:rule_group_id', 'belongsToUser:rule_groups,title'],
'trigger' => ['required', 'in:store-journal,update-journal,manual-activation'],
'triggers.*.type' => 'required|in:'.implode(',', $validTriggers),
'triggers.*.value' => 'required_if:actions.*.type,'.$contextTriggers.'|min:1|ruleTriggerValue|max:1024',
'triggers.*.stop_processing' => [new IsBoolean()],
@@ -47,10 +47,10 @@ class TestRequest extends FormRequest
public function rules(): array
{
return [
'start' => 'date|after:1970-01-02|before:2038-01-17',
'end' => 'date|after_or_equal:start|after:1970-01-02|before:2038-01-17',
'start' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
'end' => ['date', 'after_or_equal:start', 'after:1970-01-02', 'before:2038-01-17'],
'accounts' => '',
'accounts.*' => 'required|exists:accounts,id|belongsToUser:accounts',
'accounts.*' => ['required', 'exists:accounts,id', 'belongsToUser:accounts'],
];
}
@@ -47,10 +47,10 @@ class TriggerRequest extends FormRequest
public function rules(): array
{
return [
'start' => 'date|after:1970-01-02|before:2038-01-17',
'end' => 'date|after_or_equal:start|after:1970-01-02|before:2038-01-17',
'start' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
'end' => ['date', 'after_or_equal:start', 'after:1970-01-02', 'before:2038-01-17'],
'accounts' => '',
'accounts.*' => 'exists:accounts,id|belongsToUser:accounts',
'accounts.*' => ['exists:accounts,id', 'belongsToUser:accounts'],
];
}
@@ -91,9 +91,9 @@ class UpdateRequest extends FormRequest
return [
'title' => sprintf('min:1|max:100|uniqueObjectForUser:rules,title,%d', $rule->id),
'description' => 'min:1|max:32768|nullable',
'description' => ['min:1', 'max:32768', 'nullable'],
'rule_group_id' => 'belongsToUser:rule_groups',
'rule_group_title' => 'nullable|min:1|max:255|belongsToUser:rule_groups,title',
'rule_group_title' => ['nullable', 'min:1', 'max:255', 'belongsToUser:rule_groups,title'],
'trigger' => 'in:store-journal,update-journal,manual-activation',
'triggers.*.type' => 'required|in:'.implode(',', $validTriggers),
'triggers.*.value' => 'required_if:actions.*.type,'.$contextTriggers.'|min:1|ruleTriggerValue|max:1024',
@@ -106,7 +106,7 @@ class UpdateRequest extends FormRequest
'strict' => [new IsBoolean()],
'stop_processing' => [new IsBoolean()],
'active' => [new IsBoolean()],
'order' => 'numeric|min:1|max:2048',
'order' => ['numeric', 'min:1', 'max:2048'],
];
}
@@ -67,8 +67,8 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'title' => 'required|min:1|max:100|uniqueObjectForUser:rule_groups,title',
'description' => 'min:1|max:32768|nullable',
'title' => ['required', 'min:1', 'max:100', 'uniqueObjectForUser:rule_groups,title'],
'description' => ['min:1', 'max:32768', 'nullable'],
'active' => [new IsBoolean()],
];
}
@@ -47,10 +47,10 @@ class TestRequest extends FormRequest
public function rules(): array
{
return [
'start' => 'date|after:1970-01-02|before:2038-01-17',
'end' => 'date|after_or_equal:start|after:1970-01-02|before:2038-01-17',
'start' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
'end' => ['date', 'after_or_equal:start', 'after:1970-01-02', 'before:2038-01-17'],
'accounts' => '',
'accounts.*' => 'exists:accounts,id|belongsToUser:accounts',
'accounts.*' => ['exists:accounts,id', 'belongsToUser:accounts'],
];
}
@@ -46,7 +46,10 @@ class TriggerRequest extends FormRequest
public function rules(): array
{
return ['start' => 'date|after:1970-01-02|before:2038-01-17', 'end' => 'date|after_or_equal:start|after:1970-01-02|before:2038-01-17'];
return [
'start' => ['date', 'after:1970-01-02', 'before:2038-01-17'],
'end' => ['date', 'after_or_equal:start', 'after:1970-01-02', 'before:2038-01-17'],
];
}
private function getAccounts(): array
@@ -66,7 +66,7 @@ class UpdateRequest extends FormRequest
return [
'title' => 'min:1|max:100|uniqueObjectForUser:rule_groups,title,'.$ruleGroup->id,
'description' => 'min:1|max:32768|nullable',
'description' => ['min:1', 'max:32768', 'nullable'],
'active' => [new IsBoolean()],
];
}
@@ -62,9 +62,9 @@ class StoreRequest extends FormRequest
public function rules(): array
{
$rules = [
'tag' => 'required|min:1|uniqueObjectForUser:tags,tag|max:1024',
'description' => 'min:1|nullable|max:32768',
'date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'tag' => ['required', 'min:1', 'uniqueObjectForUser:tags,tag', 'max:1024'],
'description' => ['min:1', 'nullable', 'max:32768'],
'date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
];
return Location::requestRules($rules);
@@ -63,8 +63,8 @@ class UpdateRequest extends FormRequest
$tag = $this->route()->parameter('tagOrId');
$rules = [
'tag' => 'min:1|max:1024|uniqueObjectForUser:tags,tag,'.$tag->id,
'description' => 'min:1|nullable|max:32768',
'date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'description' => ['min:1', 'nullable', 'max:32768'],
'date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
];
return Location::requestRules($rules);
@@ -30,7 +30,7 @@ use FireflyIII\Rules\IsBoolean;
use FireflyIII\Rules\IsDateOrTime;
use FireflyIII\Rules\IsValidPositiveAmount;
use FireflyIII\Rules\IsValidZeroOrMoreAmount;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\NullArrayObject;
use FireflyIII\Support\Request\AppendsLocationData;
use FireflyIII\Support\Request\ChecksLogin;
@@ -81,12 +81,12 @@ class StoreRequest extends FormRequest
public function rules(): array
{
Log::debug('Collect rules of TransactionStoreRequest');
$validProtocols = FireflyConfig::get('valid_url_protocols', config('firefly.valid_url_protocols'))->data;
$validProtocols = AppConfiguration::get('valid_url_protocols', config('firefly.valid_url_protocols'))->data;
$locationRules = Location::requestRules([]);
return [
// basic fields for group:
'group_title' => 'min:1|max:1000|nullable',
'group_title' => ['min:1', 'max:1000', 'nullable'],
'error_if_duplicate_hash' => [new IsBoolean()],
'fire_webhooks' => [new IsBoolean()],
'apply_rules' => [new IsBoolean()],
@@ -97,42 +97,42 @@ class StoreRequest extends FormRequest
'transactions.*.zoom_level' => $locationRules['zoom_level'],
// transaction rules (in array for splits):
'transactions.*.type' => 'required|in:withdrawal,deposit,transfer,opening-balance,reconciliation',
'transactions.*.type' => ['required', 'in:withdrawal,deposit,transfer,opening-balance,reconciliation'],
'transactions.*.date' => ['required', new IsDateOrTime()],
'transactions.*.order' => 'numeric|min:0',
'transactions.*.order' => ['numeric', 'min:0'],
// currency info
'transactions.*.currency_id' => 'numeric|exists:transaction_currencies,id|nullable',
'transactions.*.currency_code' => 'min:3|max:51|exists:transaction_currencies,code|nullable',
'transactions.*.foreign_currency_id' => 'numeric|exists:transaction_currencies,id|nullable',
'transactions.*.foreign_currency_code' => 'min:3|max:51|exists:transaction_currencies,code|nullable',
'transactions.*.currency_id' => ['numeric', 'exists:transaction_currencies,id', 'nullable'],
'transactions.*.currency_code' => ['min:3', 'max:51', 'exists:transaction_currencies,code', 'nullable'],
'transactions.*.foreign_currency_id' => ['numeric', 'exists:transaction_currencies,id', 'nullable'],
'transactions.*.foreign_currency_code' => ['min:3', 'max:51', 'exists:transaction_currencies,code', 'nullable'],
// amount
'transactions.*.amount' => ['required', new IsValidPositiveAmount()],
'transactions.*.foreign_amount' => ['nullable', new IsValidZeroOrMoreAmount()],
// description
'transactions.*.description' => 'nullable|min:1|max:1000',
'transactions.*.description' => ['nullable', 'min:1', 'max:1000'],
// source of transaction
'transactions.*.source_id' => ['numeric', 'nullable', new BelongsUser()],
'transactions.*.source_name' => 'min:1|max:255|nullable',
'transactions.*.source_iban' => 'min:1|max:255|nullable|iban',
'transactions.*.source_number' => 'min:1|max:255|nullable',
'transactions.*.source_bic' => 'min:1|max:255|nullable|bic',
'transactions.*.source_name' => ['min:1', 'max:255', 'nullable'],
'transactions.*.source_iban' => ['min:1', 'max:255', 'nullable', 'iban'],
'transactions.*.source_number' => ['min:1', 'max:255', 'nullable'],
'transactions.*.source_bic' => ['min:1', 'max:255', 'nullable', 'bic'],
// destination of transaction
'transactions.*.destination_id' => ['numeric', 'nullable', new BelongsUser()],
'transactions.*.destination_name' => 'min:1|max:255|nullable',
'transactions.*.destination_iban' => 'min:1|max:255|nullable|iban',
'transactions.*.destination_number' => 'min:1|max:255|nullable',
'transactions.*.destination_bic' => 'min:1|max:255|nullable|bic',
'transactions.*.destination_name' => ['min:1', 'max:255', 'nullable'],
'transactions.*.destination_iban' => ['min:1', 'max:255', 'nullable', 'iban'],
'transactions.*.destination_number' => ['min:1', 'max:255', 'nullable'],
'transactions.*.destination_bic' => ['min:1', 'max:255', 'nullable', 'bic'],
// budget, category, bill and piggy
'transactions.*.budget_id' => ['mustExist:budgets,id', new BelongsUser()],
'transactions.*.budget_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()],
'transactions.*.category_id' => ['mustExist:categories,id', new BelongsUser(), 'nullable'],
'transactions.*.category_name' => 'min:1|max:255|nullable',
'transactions.*.category_name' => ['min:1', 'max:255', 'nullable'],
'transactions.*.bill_id' => ['numeric', 'nullable', 'mustExist:bills,id', new BelongsUser()],
'transactions.*.bill_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()],
'transactions.*.piggy_bank_id' => ['numeric', 'nullable', 'mustExist:piggy_banks,id', new BelongsUser()],
@@ -140,34 +140,34 @@ class StoreRequest extends FormRequest
// other interesting fields
'transactions.*.reconciled' => [new IsBoolean()],
'transactions.*.notes' => 'min:1|max:32768|nullable',
'transactions.*.tags' => 'min:0|max:255',
'transactions.*.tags.*' => 'min:0|max:255',
'transactions.*.notes' => ['min:1', 'max:32768', 'nullable'],
'transactions.*.tags' => ['min:0', 'max:255'],
'transactions.*.tags.*' => ['min:0', 'max:255'],
// meta info fields
'transactions.*.internal_reference' => 'min:1|max:255|nullable',
'transactions.*.external_id' => 'min:1|max:255|nullable',
'transactions.*.recurrence_id' => 'min:1|max:255|nullable',
'transactions.*.bunq_payment_id' => 'min:1|max:255|nullable',
'transactions.*.internal_reference' => ['min:1', 'max:255', 'nullable'],
'transactions.*.external_id' => ['min:1', 'max:255', 'nullable'],
'transactions.*.recurrence_id' => ['min:1', 'max:255', 'nullable'],
'transactions.*.bunq_payment_id' => ['min:1', 'max:255', 'nullable'],
'transactions.*.external_url' => sprintf('min:1|max:255|nullable|url:%s', $validProtocols),
// SEPA fields:
'transactions.*.sepa_cc' => 'min:1|max:255|nullable',
'transactions.*.sepa_ct_op' => 'min:1|max:255|nullable',
'transactions.*.sepa_ct_id' => 'min:1|max:255|nullable',
'transactions.*.sepa_db' => 'min:1|max:255|nullable',
'transactions.*.sepa_country' => 'min:1|max:255|nullable',
'transactions.*.sepa_ep' => 'min:1|max:255|nullable',
'transactions.*.sepa_ci' => 'min:1|max:255|nullable',
'transactions.*.sepa_batch_id' => 'min:1|max:255|nullable',
'transactions.*.sepa_cc' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_ct_op' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_ct_id' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_db' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_country' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_ep' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_ci' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_batch_id' => ['min:1', 'max:255', 'nullable'],
// dates
'transactions.*.interest_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.book_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.process_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.due_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.payment_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.invoice_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.interest_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
'transactions.*.book_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
'transactions.*.process_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
'transactions.*.due_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
'transactions.*.payment_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
'transactions.*.invoice_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
];
}
@@ -31,7 +31,7 @@ use FireflyIII\Rules\IsBoolean;
use FireflyIII\Rules\IsDateOrTime;
use FireflyIII\Rules\IsValidPositiveAmount;
use FireflyIII\Rules\IsValidZeroOrMoreAmount;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Validation\GroupValidation;
@@ -141,80 +141,80 @@ class UpdateRequest extends FormRequest
public function rules(): array
{
Log::debug(sprintf('Now in %s', __METHOD__));
$validProtocols = FireflyConfig::get('valid_url_protocols', config('firefly.valid_url_protocols'))->data;
$validProtocols = AppConfiguration::get('valid_url_protocols', config('firefly.valid_url_protocols'))->data;
return [
// basic fields for group:
'group_title' => 'min:1|max:1000|nullable',
'group_title' => ['min:1', 'max:1000', 'nullable'],
'apply_rules' => [new IsBoolean()],
// transaction rules (in array for splits):
'transactions.*.type' => 'in:withdrawal,deposit,transfer,opening-balance,reconciliation',
'transactions.*.date' => [new IsDateOrTime()],
'transactions.*.order' => 'numeric|min:0',
'transactions.*.order' => ['numeric', 'min:0'],
// group id:
'transactions.*.transaction_journal_id' => ['nullable', 'numeric', new BelongsUser()],
// currency info
'transactions.*.currency_id' => 'numeric|exists:transaction_currencies,id|nullable',
'transactions.*.currency_code' => 'min:3|max:51|exists:transaction_currencies,code|nullable',
'transactions.*.foreign_currency_id' => 'nullable|numeric|exists:transaction_currencies,id',
'transactions.*.foreign_currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code',
'transactions.*.currency_id' => ['numeric', 'exists:transaction_currencies,id', 'nullable'],
'transactions.*.currency_code' => ['min:3', 'max:51', 'exists:transaction_currencies,code', 'nullable'],
'transactions.*.foreign_currency_id' => ['nullable', 'numeric', 'exists:transaction_currencies,id'],
'transactions.*.foreign_currency_code' => ['nullable', 'min:3', 'max:51', 'exists:transaction_currencies,code'],
// amount
'transactions.*.amount' => [new IsValidPositiveAmount()],
'transactions.*.foreign_amount' => ['nullable', new IsValidZeroOrMoreAmount()],
// description
'transactions.*.description' => 'nullable|min:1|max:1000',
'transactions.*.description' => ['nullable', 'min:1', 'max:1000'],
// source of transaction
'transactions.*.source_id' => ['numeric', 'nullable', new BelongsUser()],
'transactions.*.source_name' => 'min:1|max:255|nullable',
'transactions.*.source_name' => ['min:1', 'max:255', 'nullable'],
// destination of transaction
'transactions.*.destination_id' => ['numeric', 'nullable', new BelongsUser()],
'transactions.*.destination_name' => 'min:1|max:255|nullable',
'transactions.*.destination_name' => ['min:1', 'max:255', 'nullable'],
// budget, category, bill and piggy
'transactions.*.budget_id' => ['mustExist:budgets,id', new BelongsUser(), 'nullable'],
'transactions.*.budget_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()],
'transactions.*.category_id' => ['mustExist:categories,id', new BelongsUser(), 'nullable'],
'transactions.*.category_name' => 'min:1|max:255|nullable',
'transactions.*.category_name' => ['min:1', 'max:255', 'nullable'],
'transactions.*.bill_id' => ['numeric', 'nullable', 'mustExist:bills,id', new BelongsUser()],
'transactions.*.bill_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()],
// other interesting fields
'transactions.*.reconciled' => [new IsBoolean()],
'transactions.*.notes' => 'min:1|max:32768|nullable',
'transactions.*.tags' => 'min:0|max:255|nullable',
'transactions.*.tags.*' => 'min:0|max:255',
'transactions.*.notes' => ['min:1', 'max:32768', 'nullable'],
'transactions.*.tags' => ['min:0', 'max:255', 'nullable'],
'transactions.*.tags.*' => ['min:0', 'max:255'],
// meta info fields
'transactions.*.internal_reference' => 'min:1|max:255|nullable',
'transactions.*.external_id' => 'min:1|max:255|nullable',
'transactions.*.recurrence_id' => 'min:1|max:255|nullable',
'transactions.*.bunq_payment_id' => 'min:1|max:255|nullable',
'transactions.*.internal_reference' => ['min:1', 'max:255', 'nullable'],
'transactions.*.external_id' => ['min:1', 'max:255', 'nullable'],
'transactions.*.recurrence_id' => ['min:1', 'max:255', 'nullable'],
'transactions.*.bunq_payment_id' => ['min:1', 'max:255', 'nullable'],
'transactions.*.external_url' => sprintf('min:1|max:255|nullable|url:%s', $validProtocols),
// SEPA fields:
'transactions.*.sepa_cc' => 'min:1|max:255|nullable',
'transactions.*.sepa_ct_op' => 'min:1|max:255|nullable',
'transactions.*.sepa_ct_id' => 'min:1|max:255|nullable',
'transactions.*.sepa_db' => 'min:1|max:255|nullable',
'transactions.*.sepa_country' => 'min:1|max:255|nullable',
'transactions.*.sepa_ep' => 'min:1|max:255|nullable',
'transactions.*.sepa_ci' => 'min:1|max:255|nullable',
'transactions.*.sepa_batch_id' => 'min:1|max:255|nullable',
'transactions.*.sepa_cc' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_ct_op' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_ct_id' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_db' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_country' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_ep' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_ci' => ['min:1', 'max:255', 'nullable'],
'transactions.*.sepa_batch_id' => ['min:1', 'max:255', 'nullable'],
// dates
'transactions.*.interest_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.book_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.process_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.due_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.payment_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.invoice_date' => 'date|nullable|after:1970-01-02|before:2038-01-17',
'transactions.*.interest_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
'transactions.*.book_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
'transactions.*.process_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
'transactions.*.due_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
'transactions.*.payment_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
'transactions.*.invoice_date' => ['date', 'nullable', 'after:1970-01-02', 'before:2038-01-17'],
];
}
@@ -69,10 +69,10 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'name' => 'required|min:1|max:255|unique:transaction_currencies,name',
'code' => 'required|min:3|max:32|unique:transaction_currencies,code',
'symbol' => 'required|min:1|max:32|unique:transaction_currencies,symbol',
'decimal_places' => 'numeric|min:0|max:12',
'name' => ['required', 'min:1', 'max:255', 'unique:transaction_currencies,name'],
'code' => ['required', 'min:3', 'max:32', 'unique:transaction_currencies,code'],
'symbol' => ['required', 'min:1', 'max:32', 'unique:transaction_currencies,symbol'],
'decimal_places' => ['numeric', 'min:0', 'max:12'],
'enabled' => [new IsBoolean()],
'default' => [new IsBoolean()],
];
@@ -82,7 +82,7 @@ class UpdateRequest extends FormRequest
'name' => sprintf('min:1|max:255|unique:transaction_currencies,name,%d', $currency->id),
'code' => sprintf('min:3|max:32|unique:transaction_currencies,code,%d', $currency->id),
'symbol' => sprintf('min:1|max:32|unique:transaction_currencies,symbol,%d', $currency->id),
'decimal_places' => 'numeric|min:0|max:12',
'decimal_places' => ['numeric', 'min:0', 'max:12'],
'enabled' => [new IsBoolean()],
'default' => [new IsBoolean()],
];
@@ -63,11 +63,11 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'link_type_id' => 'exists:link_types,id|required_without:link_type_name',
'link_type_name' => 'exists:link_types,name|required_without:link_type_id',
'inward_id' => 'required|belongsToUser:transaction_journals,id|different:outward_id',
'outward_id' => 'required|belongsToUser:transaction_journals,id|different:inward_id',
'notes' => 'min:1|max:32768|nullable',
'link_type_id' => ['exists:link_types,id', 'required_without:link_type_name'],
'link_type_name' => ['exists:link_types,name', 'required_without:link_type_id'],
'inward_id' => ['required', 'belongsToUser:transaction_journals,id', 'different:outward_id'],
'outward_id' => ['required', 'belongsToUser:transaction_journals,id', 'different:inward_id'],
'notes' => ['min:1', 'max:32768', 'nullable'],
];
}
@@ -65,9 +65,9 @@ class UpdateRequest extends FormRequest
return [
'link_type_id' => 'exists:link_types,id',
'link_type_name' => 'exists:link_types,name',
'inward_id' => 'belongsToUser:transaction_journals,id|different:outward_id',
'outward_id' => 'belongsToUser:transaction_journals,id|different:inward_id',
'notes' => 'min:1|max:32768|nullable',
'inward_id' => ['belongsToUser:transaction_journals,id', 'different:outward_id'],
'outward_id' => ['belongsToUser:transaction_journals,id', 'different:inward_id'],
'notes' => ['min:1', 'max:32768', 'nullable'],
];
}
@@ -52,9 +52,9 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'name' => 'required|unique:link_types,name|min:1|max:1024',
'outward' => 'required|unique:link_types,outward|min:1|different:inward|max:1024',
'inward' => 'required|unique:link_types,inward|min:1|different:outward|max:1024',
'name' => ['required', 'unique:link_types,name', 'min:1', 'max:1024'],
'outward' => ['required', 'unique:link_types,outward', 'min:1', 'different:inward', 'max:1024'],
'inward' => ['required', 'unique:link_types,inward', 'min:1', 'different:outward', 'max:1024'],
];
}
}
@@ -28,7 +28,7 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Webhook;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Rules\Webhook\IsValidWebhookUrl;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Support\Request\ValidatesWebhooks;
@@ -72,19 +72,19 @@ class CreateRequest extends FormRequest
$triggers = implode(',', array_values(Webhook::getTriggers()));
$responses = implode(',', array_values(Webhook::getResponses()));
$deliveries = implode(',', array_values(Webhook::getDeliveries()));
$validProtocols = FireflyConfig::get('valid_url_protocols', config('firefly.valid_url_protocols'))->data;
$validProtocols = AppConfiguration::get('valid_url_protocols', config('firefly.valid_url_protocols'))->data;
return [
'title' => 'required|min:1|max:255|uniqueObjectForUser:webhooks,title',
'title' => ['required', 'min:1', 'max:255', 'uniqueObjectForUser:webhooks,title'],
'active' => [new IsBoolean()],
'trigger' => 'prohibited',
'triggers' => 'required|array|min:1|max:10',
'triggers' => ['required', 'array', 'min:1', 'max:10'],
'triggers.*' => sprintf('required|in:%s', $triggers),
'response' => 'prohibited',
'responses' => 'required|array|min:1|max:1',
'responses' => ['required', 'array', 'min:1', 'max:1'],
'responses.*' => sprintf('required|in:%s', $responses),
'delivery' => 'prohibited',
'deliveries' => 'required|array|min:1|max:1',
'deliveries' => ['required', 'array', 'min:1', 'max:1'],
'deliveries.*' => sprintf('required|in:%s', $deliveries),
'url' => ['required', sprintf('url:%s', $validProtocols), new IsValidWebhookUrl()],
];
@@ -28,7 +28,7 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Webhook;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Rules\Webhook\IsValidWebhookUrl;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Support\Request\ValidatesWebhooks;
@@ -73,7 +73,7 @@ class UpdateRequest extends FormRequest
$triggers = implode(',', array_values(Webhook::getTriggers()));
$responses = implode(',', array_values(Webhook::getResponses()));
$deliveries = implode(',', array_values(Webhook::getDeliveries()));
$validProtocols = FireflyConfig::get('valid_url_protocols', config('firefly.valid_url_protocols'))->data;
$validProtocols = AppConfiguration::get('valid_url_protocols', config('firefly.valid_url_protocols'))->data;
/** @var Webhook $webhook */
$webhook = $this->route()->parameter('webhook');
@@ -82,13 +82,13 @@ class UpdateRequest extends FormRequest
'title' => sprintf('min:1|max:255|uniqueObjectForUser:webhooks,title,%d', $webhook->id),
'active' => [new IsBoolean()],
'trigger' => 'prohibited',
'triggers' => 'required|array|min:1|max:10',
'triggers' => ['required', 'array', 'min:1', 'max:10'],
'triggers.*' => sprintf('required|in:%s', $triggers),
'response' => 'prohibited',
'responses' => 'required|array|min:1|max:1',
'responses' => ['required', 'array', 'min:1', 'max:1'],
'responses.*' => sprintf('required|in:%s', $responses),
'delivery' => 'prohibited',
'deliveries' => 'required|array|min:1|max:1',
'deliveries' => ['required', 'array', 'min:1', 'max:1'],
'deliveries.*' => sprintf('required|in:%s', $deliveries),
'url' => [sprintf('url:%s', $validProtocols), sprintf('uniqueExistingWebhook:%d', $webhook->id), new IsValidWebhookUrl()],
];
+2 -2
View File
@@ -50,8 +50,8 @@ class PaginationRequest extends ApiRequest
{
return [
'sort' => ['nullable', new IsValidSortInstruction((string) $this->sortClass)],
'limit' => 'numeric|min:1|max:131337',
'page' => 'numeric|min:1|max:131337',
'limit' => ['numeric', 'min:1', 'max:131337'],
'page' => ['numeric', 'min:1', 'max:131337'],
];
}
+4 -4
View File
@@ -34,10 +34,10 @@ class CountRequest extends AggregateFormRequest
public function rules(): array
{
return [
'notes' => 'string|min:1|max:255',
'external_identifier' => 'string|min:1|max:255',
'description' => 'string|min:1|max:255',
'internal_reference' => 'string|min:1|max:255',
'notes' => ['string', 'min:1', 'max:255'],
'external_identifier' => ['string', 'min:1', 'max:255'],
'description' => ['string', 'min:1', 'max:255'],
'internal_reference' => ['string', 'min:1', 'max:255'],
'include_deleted' => new IsBoolean(),
];
}
+1 -1
View File
@@ -68,6 +68,6 @@ class CronRequest extends FormRequest
*/
public function rules(): array
{
return ['force' => 'in:true,false', 'date' => 'nullable|date|after:1970-01-02|before:2038-01-17'];
return ['force' => 'in:true,false', 'date' => ['nullable', 'date', 'after:1970-01-02', 'before:2038-01-17']];
}
}
+2 -2
View File
@@ -77,10 +77,10 @@ class UpdateRequest extends FormRequest
return ['value' => ['required', new IsBoolean()]];
}
if ('configuration.permission_update_check' === $name) {
return ['value' => 'required|numeric|min:-1|max:1'];
return ['value' => ['required', 'numeric', 'min:-1', 'max:1']];
}
if (in_array($name, $this->integers, strict: true)) {
return ['value' => 'required|numeric|min:464272080'];
return ['value' => ['required', 'numeric', 'min:464272080']];
}
return ['value' => 'required'];
@@ -71,7 +71,7 @@ class UserStoreRequest extends FormRequest
public function rules(): array
{
return [
'email' => 'required|email|unique:users,email',
'email' => ['required', 'email', 'unique:users,email'],
'blocked' => [new IsBoolean()],
'blocked_code' => 'in:email_changed',
'role' => 'in:owner,demo',
@@ -52,15 +52,15 @@ class ClearsEmptyForeignAmounts extends Command
public function handle(): int
{
// transaction: has no amount, but reference to currency.
$count = Transaction::whereNull('foreign_amount')->whereNotNull('foreign_currency_id')->count();
$count = Transaction::query()->whereNull('foreign_amount')->whereNotNull('foreign_currency_id')->count();
if ($count > 0) {
Transaction::whereNull('foreign_amount')->whereNotNull('foreign_currency_id')->update(['foreign_currency_id' => null]);
Transaction::query()->whereNull('foreign_amount')->whereNotNull('foreign_currency_id')->update(['foreign_currency_id' => null]);
$this->friendlyInfo(sprintf('Corrected %d invalid foreign amount reference(s)', $count));
}
// transaction: has amount, but no currency.
$count = Transaction::whereNull('foreign_currency_id')->whereNotNull('foreign_amount')->count();
$count = Transaction::query()->whereNull('foreign_currency_id')->whereNotNull('foreign_amount')->count();
if ($count > 0) {
Transaction::whereNull('foreign_currency_id')->whereNotNull('foreign_amount')->update(['foreign_amount' => null]);
Transaction::query()->whereNull('foreign_currency_id')->whereNotNull('foreign_amount')->update(['foreign_amount' => null]);
$this->friendlyInfo(sprintf('Corrected %d invalid foreign amount reference(s)', $count));
}
@@ -26,7 +26,7 @@ namespace FireflyIII\Console\Commands\Correction;
use Carbon\Carbon;
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\QueryException;
@@ -58,7 +58,7 @@ class ConvertsDatesToUTC extends Command
$this->ConvertModeltoUTC($model, $fields);
}
// tell the system we are now in UTC mode.
FireflyConfig::set('utc', true);
AppConfiguration::set('utc', true);
return Command::SUCCESS;
}
@@ -88,7 +88,7 @@ class CorrectsAmounts extends Command
/** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class);
$type = TransactionType::where('type', TransactionTypeEnum::TRANSFER->value)->first();
$type = TransactionType::query()->where('type', TransactionTypeEnum::TRANSFER->value)->first();
$journals = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
->whereNotNull('transactions.foreign_amount')
->where('transaction_journals.transaction_type_id', $type->id)
@@ -188,7 +188,10 @@ class CorrectsAmounts extends Command
private function fixAutoBudgets(): void
{
$count = AutoBudget::where('amount', '<', 0)->update(['amount' => DB::raw('amount * -1')]);
$count = AutoBudget::query()
->where('amount', '<', 0)
->update(['amount' => DB::raw('amount * -1')])
;
if (0 === $count) {
return;
}
@@ -197,7 +200,10 @@ class CorrectsAmounts extends Command
private function fixAvailableBudgets(): void
{
$count = AvailableBudget::where('amount', '<', 0)->update(['amount' => DB::raw('amount * -1')]);
$count = AvailableBudget::query()
->where('amount', '<', 0)
->update(['amount' => DB::raw('amount * -1')])
;
if (0 === $count) {
return;
}
@@ -207,8 +213,14 @@ class CorrectsAmounts extends Command
private function fixBills(): void
{
$count = 0;
$count += Bill::where('amount_max', '<', 0)->update(['amount_max' => DB::raw('amount_max * -1')]);
$count += Bill::where('amount_min', '<', 0)->update(['amount_min' => DB::raw('amount_min * -1')]);
$count += Bill::query()
->where('amount_max', '<', 0)
->update(['amount_max' => DB::raw('amount_max * -1')])
;
$count += Bill::query()
->where('amount_min', '<', 0)
->update(['amount_min' => DB::raw('amount_min * -1')])
;
if (0 === $count) {
return;
}
@@ -217,7 +229,10 @@ class CorrectsAmounts extends Command
private function fixBudgetLimits(): void
{
$count = BudgetLimit::where('amount', '<', 0)->update(['amount' => DB::raw('amount * -1')]);
$count = BudgetLimit::query()
->where('amount', '<', 0)
->update(['amount' => DB::raw('amount * -1')])
;
if (0 === $count) {
return;
}
@@ -226,7 +241,10 @@ class CorrectsAmounts extends Command
private function fixExchangeRates(): void
{
$count = CurrencyExchangeRate::where('rate', '<', 0)->update(['rate' => DB::raw('rate * -1')]);
$count = CurrencyExchangeRate::query()
->where('rate', '<', 0)
->update(['rate' => DB::raw('rate * -1')])
;
if (0 === $count) {
return;
}
@@ -235,7 +253,10 @@ class CorrectsAmounts extends Command
private function fixPiggyBanks(): void
{
$count = PiggyBank::where('target_amount', '<', 0)->update(['target_amount' => DB::raw('target_amount * -1')]);
$count = PiggyBank::query()
->where('target_amount', '<', 0)
->update(['target_amount' => DB::raw('target_amount * -1')])
;
if (0 === $count) {
return;
}
@@ -245,8 +266,14 @@ class CorrectsAmounts extends Command
private function fixRecurrences(): void
{
$count = 0;
$count += RecurrenceTransaction::where('amount', '<', 0)->update(['amount' => DB::raw('amount * -1')]);
$count += RecurrenceTransaction::where('foreign_amount', '<', 0)->update(['foreign_amount' => DB::raw('foreign_amount * -1')]);
$count += RecurrenceTransaction::query()
->where('amount', '<', 0)
->update(['amount' => DB::raw('amount * -1')])
;
$count += RecurrenceTransaction::query()
->where('foreign_amount', '<', 0)
->update(['foreign_amount' => DB::raw('foreign_amount * -1')])
;
if (0 === $count) {
return;
}
@@ -285,7 +312,7 @@ class CorrectsAmounts extends Command
*/
private function fixRuleTriggers(): void
{
$set = RuleTrigger::whereIn('trigger_type', ['amount_less', 'amount_more', 'amount_is'])->get();
$set = RuleTrigger::query()->whereIn('trigger_type', ['amount_less', 'amount_more', 'amount_is'])->get();
$fixed = 0;
/** @var RuleTrigger $item */
@@ -81,7 +81,7 @@ class CorrectsCurrencies extends Command
}
// get all from journals:
$journals = TransactionJournal::where('user_group_id', $userGroup->id)->groupBy('transaction_currency_id')->get(['transaction_currency_id']);
$journals = TransactionJournal::query()->where('user_group_id', $userGroup->id)->groupBy('transaction_currency_id')->get(['transaction_currency_id']);
foreach ($journals as $entry) {
$found[] = (int) $entry->transaction_currency_id;
}
@@ -49,7 +49,10 @@ class CorrectsGroupAccounts extends Command
{
Log::debug('Start of correction:group-accounts');
$groups = [];
$res = TransactionJournal::groupBy('transaction_group_id')->get(['transaction_group_id', DB::raw('COUNT(transaction_group_id) as the_count')]);
$res = TransactionJournal::query()->groupBy('transaction_group_id')->get([
'transaction_group_id',
DB::raw('COUNT(transaction_group_id) as the_count'),
]);
/** @var TransactionJournal $journal */
foreach ($res as $journal) {
@@ -44,7 +44,7 @@ class CorrectsIbans extends Command
*/
public function handle(): int
{
$accounts = Account::with('accountMeta')->get();
$accounts = Account::query()->with('accountMeta')->get();
$this->filterIbans($accounts);
$this->countAndCorrectIbans($accounts);
@@ -53,7 +53,7 @@ class CorrectsInvertedBudgetLimits extends Command
*/
public function handle(): int
{
$set = BudgetLimit::where('start_date', '>', DB::raw('end_date'))->get();
$set = BudgetLimit::query()->where('start_date', '>', DB::raw('end_date'))->get();
if (0 === $set->count()) {
Log::debug('No inverted budget limits found.');
@@ -44,7 +44,7 @@ class CorrectsLongDescriptions extends Command
*/
public function handle(): int
{
$journals = TransactionJournal::where(DB::raw('LENGTH(description)'), '>', self::MAX_LENGTH)->get(['id', 'description']);
$journals = TransactionJournal::query()->where(DB::raw('LENGTH(description)'), '>', self::MAX_LENGTH)->get(['id', 'description']);
$count = 0;
/** @var TransactionJournal $journal */
@@ -57,7 +57,7 @@ class CorrectsLongDescriptions extends Command
}
}
$groups = TransactionGroup::where(DB::raw('LENGTH(title)'), '>', self::MAX_LENGTH)->get(['id', 'title']);
$groups = TransactionGroup::query()->where(DB::raw('LENGTH(title)'), '>', self::MAX_LENGTH)->get(['id', 'title']);
/** @var TransactionGroup $group */
foreach ($groups as $group) {
@@ -42,7 +42,7 @@ class CorrectsPiggyBanks extends Command
public function handle(): int
{
$count = 0;
$set = PiggyBankEvent::with(['PiggyBank', 'TransactionJournal'])->get();
$set = PiggyBankEvent::query()->with(['PiggyBank', 'TransactionJournal'])->get();
/** @var PiggyBankEvent $event */
foreach ($set as $event) {
@@ -47,7 +47,7 @@ class CorrectsPreferences extends Command
foreach ($users as $user) {
$count = 0;
foreach ($items as $item) {
$preference = Preference::where('name', $item)->where('user_id', $user->id)->first();
$preference = Preference::query()->where('name', $item)->where('user_id', $user->id)->first();
if (null === $preference) {
continue;
}
@@ -26,7 +26,7 @@ namespace FireflyIII\Console\Commands\Correction;
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Services\Internal\Recalculate\PrimaryAmountRecalculationService;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
@@ -43,7 +43,7 @@ class CorrectsPrimaryCurrencyAmounts extends Command
*/
public function handle(): int
{
if (false === FireflyConfig::get('enable_exchange_rates', config('cer.enabled'))->data) {
if (false === AppConfiguration::get('enable_exchange_rates', config('cer.enabled'))->data) {
$this->friendlyInfo('This command will not run because currency exchange rates are disabled.');
return 0;
@@ -36,7 +36,7 @@ use FireflyIII\Models\PiggyBankRepetition;
use FireflyIII\Models\Recurrence;
use FireflyIII\Models\Tag;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Console\Command;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Log;
@@ -71,7 +71,7 @@ class CorrectsTimezoneInformation extends Command
$this->addTimezoneToModel($model, $fields);
}
// not yet in UTC mode
FireflyConfig::set('utc', false);
AppConfiguration::set('utc', false);
}
private function addTimezoneToModel(string $model, array $fields): void
@@ -81,7 +81,7 @@ class CorrectsTransactionTypes extends Command
*/
private function collectJournals(): Collection
{
return TransactionJournal::with(['transactionType', 'transactions', 'transactions.account', 'transactions.account.accountType'])->get();
return TransactionJournal::query()->with(['transactionType', 'transactions', 'transactions.account', 'transactions.account.accountType'])->get();
}
private function fixJournal(TransactionJournal $journal): bool
@@ -42,7 +42,8 @@ class CorrectsTransferBudgets extends Command
*/
public function handle(): int
{
$set = TransactionJournal::distinct()
$set = TransactionJournal::query()
->distinct()
->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
->leftJoin('budget_transaction_journal', 'transaction_journals.id', '=', 'budget_transaction_journal.transaction_journal_id')
->whereNotIn('transaction_types.type', [TransactionTypeEnum::WITHDRAWAL->value])
@@ -30,7 +30,7 @@ use FireflyIII\Enums\TransactionTypeEnum;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\Facades\Steam;
use FireflyIII\Support\Models\AccountBalanceCalculator;
use Illuminate\Console\Command;
@@ -61,7 +61,7 @@ class CorrectsUnevenAmount extends Command
$this->fixUnevenAmounts();
$this->matchCurrencies();
if (true === FireflyConfig::get('use_running_balance', config('firefly.feature_flags.running_balance_column'))->data) {
if (true === AppConfiguration::get('use_running_balance', config('firefly.feature_flags.running_balance_column'))->data) {
$this->friendlyInfo('Will recalculate transaction running balance columns. This may take a LONG time. Please be patient.');
AccountBalanceCalculator::recalculateAll(false);
$this->friendlyInfo('Done recalculating transaction running balance columns.');
@@ -76,7 +76,8 @@ class CorrectsUnevenAmount extends Command
$repository = app(AccountRepositoryInterface::class);
Log::debug('convertOldStyleTransactions()');
$count = 0;
$transactions = Transaction::distinct()
$transactions = Transaction::query()
->distinct()
->leftJoin('transaction_journals', 'transaction_journals.id', 'transactions.transaction_journal_id')
->leftJoin('transaction_types', 'transaction_types.id', 'transaction_journals.transaction_type_id')
->leftJoin('accounts', 'accounts.id', 'transactions.account_id')
@@ -188,7 +189,8 @@ class CorrectsUnevenAmount extends Command
{
Log::debug('convertOldStyleTransfers()');
// select transactions with a foreign amount and a foreign currency. and it's a transfer. and they are different.
$transactions = Transaction::distinct()
$transactions = Transaction::query()
->distinct()
->leftJoin('transaction_journals', 'transaction_journals.id', 'transactions.transaction_journal_id')
->leftJoin('transaction_types', 'transaction_types.id', 'transaction_journals.transaction_type_id')
->where('transaction_types.type', TransactionTypeEnum::TRANSFER->value)
@@ -262,8 +264,14 @@ class CorrectsUnevenAmount extends Command
$journal->id ?? 0,
$journal->description ?? ''
));
Transaction::where('transaction_journal_id', $journal->id ?? 0)->forceDelete();
TransactionJournal::where('id', $journal->id ?? 0)->forceDelete();
Transaction::query()
->where('transaction_journal_id', $journal->id ?? 0)
->forceDelete()
;
TransactionJournal::query()
->where('id', $journal->id ?? 0)
->forceDelete()
;
++$this->count;
return;
@@ -282,8 +290,14 @@ class CorrectsUnevenAmount extends Command
$journal->description ?? ''
));
Transaction::where('transaction_journal_id', $journal->id ?? 0)->forceDelete();
TransactionJournal::where('id', $journal->id ?? 0)->forceDelete();
Transaction::query()
->where('transaction_journal_id', $journal->id ?? 0)
->forceDelete()
;
TransactionJournal::query()
->where('id', $journal->id ?? 0)
->forceDelete()
;
++$this->count;
return;
@@ -430,7 +444,7 @@ class CorrectsUnevenAmount extends Command
/** @var TransactionJournal $journal */
foreach ($journals as $journal) {
if (!$this->isForeignCurrencyTransfer($journal) && !$this->isBetweenAssetAndLiability($journal)) {
Transaction::where('transaction_journal_id', $journal->id)->update(['transaction_currency_id' => $journal->transaction_currency_id]);
Transaction::query()->where('transaction_journal_id', $journal->id)->update(['transaction_currency_id' => $journal->transaction_currency_id]);
++$count;
continue;
@@ -50,17 +50,22 @@ class CreatesGroupMemberships extends Command
public static function createGroupMembership(User $user): void
{
// check if membership exists
$userGroup = UserGroup::where('title', $user->email)->first();
$userGroup = UserGroup::query()->where('title', $user->email)->first();
if (null === $userGroup) {
$userGroup = UserGroup::create(['title' => $user->email]);
}
$userRole = UserRole::where('title', UserRoleEnum::OWNER->value)->first();
$userRole = UserRole::query()->where('title', UserRoleEnum::OWNER->value)->first();
if (null === $userRole) {
throw new FireflyException('Firefly III could not find a user role. Please make sure all migrations have run.');
}
$membership = GroupMembership::where('user_id', $user->id)->where('user_group_id', $userGroup->id)->where('user_role_id', $userRole->id)->first();
$membership = GroupMembership::query()
->where('user_id', $user->id)
->where('user_group_id', $userGroup->id)
->where('user_role_id', $userRole->id)
->first()
;
if (null === $membership) {
GroupMembership::create(['user_id' => $user->id, 'user_role_id' => $userRole->id, 'user_group_id' => $userGroup->id]);
}
@@ -49,7 +49,7 @@ class CreatesLinkTypes extends Command
'Reimbursement' => ['(partially) reimburses', 'is (partially) reimbursed by'],
];
foreach ($set as $name => $values) {
$link = LinkType::where('name', $name)->first();
$link = LinkType::query()->where('name', $name)->first();
if (null === $link) {
$link = new LinkType();
$link->name = $name;
@@ -43,11 +43,11 @@ class RemovesBills extends Command
public function handle(): int
{
/** @var null|TransactionType $withdrawal */
$withdrawal = TransactionType::where('type', TransactionTypeEnum::WITHDRAWAL->value)->first();
$withdrawal = TransactionType::query()->where('type', TransactionTypeEnum::WITHDRAWAL->value)->first();
if (null === $withdrawal) {
return 0;
}
$journals = TransactionJournal::whereNotNull('bill_id')->where('transaction_type_id', '!=', $withdrawal->id)->get();
$journals = TransactionJournal::query()->whereNotNull('bill_id')->where('transaction_type_id', '!=', $withdrawal->id)->get();
/** @var TransactionJournal $journal */
foreach ($journals as $journal) {
@@ -57,7 +57,7 @@ class RemovesEmptyGroups extends Command
// again, chunks for SQLite.
$chunks = array_chunk($groupIds, 500);
foreach ($chunks as $chunk) {
TransactionGroup::whereNull('deleted_at')->whereIn('id', $chunk)->delete();
TransactionGroup::query()->whereNull('deleted_at')->whereIn('id', $chunk)->delete();
}
}
@@ -80,10 +80,14 @@ class RemovesEmptyJournals extends Command
*/
private function deleteUnevenJournals(): void
{
$set = Transaction::whereNull('deleted_at')->groupBy('transactions.transaction_journal_id')->get([
DB::raw('COUNT(transactions.transaction_journal_id) as the_count'),
'transaction_journal_id',
]);
$set = Transaction::query()
->whereNull('deleted_at')
->groupBy('transactions.transaction_journal_id')
->get([
DB::raw('COUNT(transactions.transaction_journal_id) as the_count'),
'transaction_journal_id',
])
;
$total = 0;
/** @var Transaction $row */
@@ -100,7 +104,7 @@ class RemovesEmptyJournals extends Command
Log::error($e->getTraceAsString());
}
Transaction::where('transaction_journal_id', $row->transaction_journal_id)->delete();
Transaction::query()->where('transaction_journal_id', $row->transaction_journal_id)->delete();
$this->friendlyWarning(sprintf(
'Deleted transaction journal #%d because it had an uneven number of transactions.',
$row->transaction_journal_id
@@ -57,10 +57,34 @@ class RemovesLinksToDeletedObjects extends Command
*/
public function handle(): void
{
$deletedTags = Tag::withTrashed()->whereNotNull('deleted_at')->get('tags.id')->pluck('id')->toArray();
$deletedJournals = TransactionJournal::withTrashed()->whereNotNull('deleted_at')->get('transaction_journals.id')->pluck('id')->toArray();
$deletedBudgets = Budget::withTrashed()->whereNotNull('deleted_at')->get('budgets.id')->pluck('id')->toArray();
$deletedCategories = Category::withTrashed()->whereNotNull('deleted_at')->get('categories.id')->pluck('id')->toArray();
$deletedTags = Tag::query()
->withTrashed()
->whereNotNull('deleted_at')
->get('tags.id')
->pluck('id')
->toArray()
;
$deletedJournals = TransactionJournal::query()
->withTrashed()
->whereNotNull('deleted_at')
->get('transaction_journals.id')
->pluck('id')
->toArray()
;
$deletedBudgets = Budget::query()
->withTrashed()
->whereNotNull('deleted_at')
->get('budgets.id')
->pluck('id')
->toArray()
;
$deletedCategories = Category::query()
->withTrashed()
->whereNotNull('deleted_at')
->get('categories.id')
->pluck('id')
->toArray()
;
if (count($deletedTags) > 0) {
$this->cleanupTags($deletedTags);
@@ -67,7 +67,7 @@ class RemovesOrphanedTransactions extends Command
/** @var null|TransactionJournal $journal */
$journal = TransactionJournal::find($transaction->transaction_journal_id);
$journal?->delete();
Transaction::where('transaction_journal_id', $transaction->transaction_journal_id)->delete();
Transaction::query()->where('transaction_journal_id', $transaction->transaction_journal_id)->delete();
$this->friendlyWarning(sprintf(
'Deleted transaction journal #%d because account #%d was already deleted.',
$transaction->transaction_journal_id,
@@ -93,7 +93,7 @@ class RemovesOrphanedTransactions extends Command
$this->friendlyInfo(sprintf('Found %d orphaned journal(s).', $count));
foreach ($set as $entry) {
/** @var null|TransactionJournal $journal */
$journal = TransactionJournal::withTrashed()->find($entry->id);
$journal = TransactionJournal::query()->withTrashed()->find($entry->id);
if (null !== $journal) {
$journal->delete();
$this->friendlyWarning(sprintf(
@@ -42,16 +42,16 @@ class RemovesZeroAmount extends Command
*/
public function handle(): int
{
$set = Transaction::where('amount', 0)->get(['transaction_journal_id'])->pluck('transaction_journal_id')->toArray();
$set = Transaction::query()->where('amount', 0)->get(['transaction_journal_id'])->pluck('transaction_journal_id')->toArray();
$set = array_unique($set);
$journals = TransactionJournal::whereIn('id', $set)->get();
$journals = TransactionJournal::query()->whereIn('id', $set)->get();
/** @var TransactionJournal $journal */
foreach ($journals as $journal) {
$this->friendlyWarning(sprintf('Deleted transaction journal #%d because the amount is zero (0.00).', $journal->id));
$journal->delete();
Transaction::where('transaction_journal_id', $journal->id)->delete();
Transaction::query()->where('transaction_journal_id', $journal->id)->delete();
}
return 0;
+3 -3
View File
@@ -26,7 +26,7 @@ namespace FireflyIII\Console\Commands;
use FireflyIII\Events\Test\OwnerTestsNotificationChannel;
use FireflyIII\Notifications\Notifiables\OwnerNotifiable;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Console\Command;
class SendTestEmail extends Command
@@ -63,7 +63,7 @@ class SendTestEmail extends Command
}
/** @var int $lastNotification */
$lastNotification = FireflyConfig::get('last_test_notification', 123)->data;
$lastNotification = AppConfiguration::get('last_test_notification', 123)->data;
if ((time() - $lastNotification) < 120) {
$this->friendlyError((string) trans('firefly.test_rate_limited'));
@@ -72,7 +72,7 @@ class SendTestEmail extends Command
$owner = new OwnerNotifiable();
event(new OwnerTestsNotificationChannel('email', $owner));
FireflyConfig::set('last_test_notification', time());
AppConfiguration::set('last_test_notification', time());
return Command::SUCCESS;
}
@@ -490,11 +490,14 @@ class ForcesDecimalSize extends Command
{
// select all transactions with this currency and issue.
/** @var Builder $query */
$query = Transaction::where('transaction_currency_id', $currency->id)->where(
DB::raw(sprintf('CAST(amount as %s)', $this->cast)),
$this->operator,
DB::raw(sprintf($this->regularExpression, $currency->decimal_places))
);
$query = Transaction::query()
->where('transaction_currency_id', $currency->id)
->where(
DB::raw(sprintf('CAST(amount as %s)', $this->cast)),
$this->operator,
DB::raw(sprintf($this->regularExpression, $currency->decimal_places))
)
;
$result = $query->get(['transactions.*']);
if (0 === $result->count()) {
@@ -519,11 +522,14 @@ class ForcesDecimalSize extends Command
// select all transactions with this FOREIGN currency and issue.
/** @var Builder $query */
$query = Transaction::where('foreign_currency_id', $currency->id)->where(
DB::raw(sprintf('CAST(foreign_amount as %s)', $this->cast)),
$this->operator,
DB::raw(sprintf($this->regularExpression, $currency->decimal_places))
);
$query = Transaction::query()
->where('foreign_currency_id', $currency->id)
->where(
DB::raw(sprintf('CAST(foreign_amount as %s)', $this->cast)),
$this->operator,
DB::raw(sprintf($this->regularExpression, $currency->decimal_places))
)
;
$result = $query->get();
if (0 === $result->count()) {
@@ -25,7 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Console\Commands\System;
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use FireflyIII\Support\Models\AccountBalanceCalculator;
use Illuminate\Console\Command;
@@ -52,7 +52,7 @@ class RecalculatesRunningBalance extends Command
*/
public function handle(): int
{
if (true === FireflyConfig::get('use_running_balance', config('firefly.feature_flags.running_balance_column'))->data) {
if (true === AppConfiguration::get('use_running_balance', config('firefly.feature_flags.running_balance_column'))->data) {
$this->friendlyInfo('Will recalculate account balances. This may take a LONG time. Please be patient.');
$this->correctBalanceAmounts($this->option('force'));
$this->friendlyInfo('Done recalculating account balances.');
@@ -25,7 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Console\Commands\System;
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Console\Command;
class SetsLatestVersion extends Command
@@ -46,7 +46,7 @@ class SetsLatestVersion extends Command
return 0;
}
FireflyConfig::set('ff3_build_time', (int) config('firefly.build_time'));
AppConfiguration::set('ff3_build_time', (int) config('firefly.build_time'));
$this->friendlyInfo('Updated version.');
return 0;
@@ -25,7 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Console\Commands\System;
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Console\Command;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Log;
@@ -108,8 +108,8 @@ class VerifySecurityAlerts extends Command
private function removeOldAdvisory(): void
{
try {
FireflyConfig::delete('upgrade_security_message');
FireflyConfig::delete('upgrade_security_level');
AppConfiguration::delete('upgrade_security_message');
AppConfiguration::delete('upgrade_security_level');
} catch (QueryException $e) {
Log::debug(sprintf('Could not delete old security advisory, but thats OK: %s', $e->getMessage()));
}
@@ -118,8 +118,8 @@ class VerifySecurityAlerts extends Command
private function saveSecurityAdvisory(array $array): void
{
try {
FireflyConfig::set('upgrade_security_message', $array['message']);
FireflyConfig::set('upgrade_security_level', $array['level']);
AppConfiguration::set('upgrade_security_message', $array['message']);
AppConfiguration::set('upgrade_security_level', $array['level']);
} catch (QueryException $e) {
Log::debug(sprintf('Could not save new security advisory, but thats OK: %s', $e->getMessage()));
}
@@ -27,7 +27,7 @@ namespace FireflyIII\Console\Commands\Tools;
use Carbon\Carbon;
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Services\FireflyIIIOrg\Update\UpdateRequestInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Console\Command;
class ChecksForUpdates extends Command
@@ -57,7 +57,7 @@ class ChecksForUpdates extends Command
$version = config('firefly.version');
$this->friendlyLine(sprintf('You are running version "%s", built on %s', $version, $build->format('Y-m-d H:i')));
$permission = FireflyConfig::get('permission_update_check', -1)->data;
$permission = AppConfiguration::get('permission_update_check', -1)->data;
if (1 !== $permission && false === $this->option('force')) {
$this->friendlyWarning('Checking for updates is disabled. To overrule, use --force.');
+2 -2
View File
@@ -33,7 +33,7 @@ use FireflyIII\Support\Cronjobs\ExchangeRatesCronjob;
use FireflyIII\Support\Cronjobs\RecurringCronjob;
use FireflyIII\Support\Cronjobs\UpdateCheckCronjob;
use FireflyIII\Support\Cronjobs\WebhookCronjob;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
use InvalidArgumentException;
@@ -74,7 +74,7 @@ class Cron extends Command
$force = (bool) $this->option('force');
// Fire exchange rates cron job.
if (true === FireflyConfig::get('enable_external_rates', config('cer.download_enabled'))->data && ($doAll || $this->option('download-cer'))) {
if (true === AppConfiguration::get('enable_external_rates', config('cer.download_enabled'))->data && ($doAll || $this->option('download-cer'))) {
try {
$this->exchangeRatesCronJob($force, $date);
} catch (FireflyException $e) {
@@ -28,7 +28,7 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Journal\JournalCLIRepositoryInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Console\Command;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Log;
@@ -93,7 +93,8 @@ class AddsTransactionIdentifiers extends Command
try {
/** @var Transaction $opposing */
$opposing = Transaction::where('transaction_journal_id', $transaction->transaction_journal_id)
$opposing = Transaction::query()
->where('transaction_journal_id', $transaction->transaction_journal_id)
->where('amount', $amount)
->where('identifier', '=', 0)
->whereNotIn('id', $exclude)
@@ -114,14 +115,14 @@ class AddsTransactionIdentifiers extends Command
private function isExecuted(): bool
{
$configVar = FireflyConfig::get(self::CONFIG_NAME, false);
$configVar = AppConfiguration::get(self::CONFIG_NAME, false);
return (bool) $configVar?->data;
}
private function markAsExecuted(): void
{
FireflyConfig::set(self::CONFIG_NAME, true);
AppConfiguration::set(self::CONFIG_NAME, true);
}
/**
@@ -27,7 +27,7 @@ namespace FireflyIII\Console\Commands\Upgrade;
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Preference;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\AppConfiguration;
use Illuminate\Console\Command;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
@@ -145,7 +145,7 @@ class RemovesDatabaseDecryption extends Command
$this->friendlyPositive(sprintf('Decrypted the data in table "%s".', $table));
// mark as decrypted:
$configName = sprintf('is_decrypted_%s', $table);
FireflyConfig::set($configName, true);
AppConfiguration::set($configName, true);
}
private function isDecrypted(string $table): bool
@@ -154,7 +154,7 @@ class RemovesDatabaseDecryption extends Command
$configVar = null;
try {
$configVar = FireflyConfig::get($configName, false);
$configVar = AppConfiguration::get($configName, false);
} catch (FireflyException $e) {
Log::error($e->getMessage());
}

Some files were not shown because too many files have changed in this diff Show More