Compare commits

..

174 Commits

Author SHA1 Message Date
github-actions[bot]
e28e538272 Merge pull request #10252 from firefly-iii/release-1746372029
🤖 Automatically merge the PR into the develop branch.
2025-05-04 17:20:36 +02:00
JC5
6f8f175890 🤖 Auto commit for release 'develop' on 2025-05-04 2025-05-04 17:20:29 +02:00
James Cole
fbf9ab6c5f Merge pull request #10251 from firefly-iii/branch-function
Import function.
2025-05-04 17:16:30 +02:00
James Cole
3c67175e68 Import function. 2025-05-04 17:16:07 +02:00
James Cole
b0d25a1d33 Merge pull request #10250 from firefly-iii/fix-nulls
Fix nullpointers.
2025-05-04 17:09:16 +02:00
James Cole
9ea8709835 Fix nullpointers. 2025-05-04 17:08:42 +02:00
James Cole
ae22c59f21 Merge pull request #10249 from firefly-iii/add-rector
Add rector
2025-05-04 17:05:23 +02:00
James Cole
12b8ba68b3 Add script to run rector.sh 2025-05-04 17:01:04 +02:00
James Cole
6b086c9bff Add config for rector. 2025-05-04 16:57:38 +02:00
github-actions[bot]
546a1198a1 Merge pull request #10248 from firefly-iii/release-1746359742
🤖 Automatically merge the PR into the develop branch.
2025-05-04 13:55:49 +02:00
JC5
1001e04b63 🤖 Auto commit for release 'develop' on 2025-05-04 2025-05-04 13:55:42 +02:00
James Cole
2c96729d76 Merge pull request #10247 from firefly-iii/to-php-8.4
To php 8.4
2025-05-04 13:51:43 +02:00
James Cole
194d22ad90 Final set of php8.4 changes. 2025-05-04 13:50:20 +02:00
James Cole
51e86448c7 More PHP8.4 updates 2025-05-04 13:47:00 +02:00
James Cole
e42107c03c Update more code. 2025-05-04 13:04:33 +02:00
James Cole
abd9260193 Update code to use php 8.4 code, using Nestor. 2025-05-04 12:57:14 +02:00
James Cole
042e2ba97d Merge pull request #10243 from firefly-iii/split-strings
Replace string operators.
2025-05-04 12:21:14 +02:00
James Cole
d5240f7afd Replace string operators. 2025-05-04 12:20:54 +02:00
James Cole
cda90df995 Merge pull request #10242 from firefly-iii/safe-methods
Replace methods with safe variants. Let's see how this works out.
2025-05-04 12:18:24 +02:00
James Cole
446e855b74 Replace methods with safe variants. Let's see how this works out. 2025-05-04 12:11:25 +02:00
James Cole
fb31f25d71 Merge pull request #10241 from firefly-iii/type-error
Fix type error.
2025-05-04 06:17:23 +02:00
James Cole
ba43d8c3f5 Fix type error. 2025-05-04 06:15:49 +02:00
James Cole
3924781797 Make sure running balance also updates when transactions are removed. 2025-05-02 06:45:34 +02:00
James Cole
b99a6a9fc9 Merge branch 'main' into develop
# Conflicts:
#	package-lock.json
2025-05-02 05:47:08 +02:00
James Cole
2967f4d4c7 Update PR template 2025-05-02 05:46:35 +02:00
James Cole
285eeb1d12 Merge pull request #10222 from firefly-iii/dependabot/npm_and_yarn/npm_and_yarn-de653eece3 2025-05-01 06:31:58 +02:00
dependabot[bot]
6374215ebc Bump vite in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.3.2 to 6.3.4
- [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/v6.3.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.4
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-30 17:41:40 +00:00
github-actions[bot]
8f0c0f215c Merge pull request #10215 from firefly-iii/release-1745810633
🤖 Automatically merge the PR into the develop branch.
2025-04-28 05:24:02 +02:00
JC5
5fc764e72b 🤖 Auto commit for release 'develop' on 2025-04-28 2025-04-28 05:23:53 +02:00
github-actions[bot]
b330313c55 Merge pull request #10213 from firefly-iii/release-1745742741
🤖 Automatically merge the PR into the develop branch.
2025-04-27 10:32:28 +02:00
JC5
aa9ce73758 🤖 Auto commit for release 'develop' on 2025-04-27 2025-04-27 10:32:21 +02:00
github-actions[bot]
d97fda41b2 Merge pull request #10210 from firefly-iii/release-1745681629
🤖 Automatically merge the PR into the develop branch.
2025-04-26 17:33:56 +02:00
JC5
945ad79c03 🤖 Auto commit for release 'develop' on 2025-04-26 2025-04-26 17:33:49 +02:00
James Cole
6273807525 Merge pull request #10209 from firefly-iii/add-transfer-type
Add transfer type
2025-04-26 17:29:31 +02:00
James Cole
50803a2c24 Add transfer type 2025-04-26 17:29:10 +02:00
github-actions[bot]
a0e9b05680 Merge pull request #10208 from firefly-iii/release-1745674111
🤖 Automatically merge the PR into the develop branch.
2025-04-26 15:28:37 +02:00
JC5
41e74cd816 🤖 Auto commit for release 'develop' on 2025-04-26 2025-04-26 15:28:31 +02:00
James Cole
b379c8e36b Merge pull request #10207 from firefly-iii/fix-running-balance
Fix running balance
2025-04-26 15:24:36 +02:00
James Cole
76e893f86e Fix running balance 2025-04-26 15:24:14 +02:00
github-actions[bot]
5da1599959 Merge pull request #10206 from firefly-iii/release-1745670593
🤖 Automatically merge the PR into the develop branch.
2025-04-26 14:30:02 +02:00
JC5
1d997e7c86 🤖 Auto commit for release 'develop' on 2025-04-26 2025-04-26 14:29:53 +02:00
James Cole
35e2eba303 Merge pull request #10205 from firefly-iii/fix-10197
Fix #10197
2025-04-26 14:24:37 +02:00
James Cole
b50f8f8ecd Fix #10197 2025-04-26 14:24:13 +02:00
James Cole
c16d3be85f Merge pull request #10204 from firefly-iii/running-balance
Add running balance column.
2025-04-26 14:20:23 +02:00
James Cole
bd1232644f Add running balance column. 2025-04-26 14:20:00 +02:00
James Cole
37ca460ff2 Merge pull request #10203 from den-is/develop
Fix Ukrainian language names
2025-04-26 13:52:47 +02:00
Denis Iskandarov
478acdc847 Fix Ukrainian language names
Signed-off-by: Denis Iskandarov <d.iskandarov@gmail.com>
2025-04-25 18:41:22 +04:00
James Cole
f9ec94ea97 Merge pull request #10184 from firefly-iii/fix-10180
Fix #10180
2025-04-22 20:42:04 +02:00
James Cole
576c5f242c Fix #10180 2025-04-22 20:41:08 +02:00
github-actions[bot]
dba8bba41a Merge pull request #10177 from firefly-iii/release-1745301598
🤖 Automatically merge the PR into the develop branch.
2025-04-22 08:00:06 +02:00
JC5
55a00aa6fe 🤖 Auto commit for release 'develop' on 2025-04-22 2025-04-22 07:59:58 +02:00
James Cole
22133f64cf Merge pull request #10176 from firefly-iii/fix-null
Fix nullpointer
2025-04-22 07:56:01 +02:00
Sander Dorigo
2efb2377b6 Fix nullpointer 2025-04-22 07:55:14 +02:00
James Cole
9f75a96ad6 Merge pull request #10172 from firefly-iii/dependabot/npm_and_yarn/develop/i18next-25.0.1
Bump i18next from 24.2.3 to 25.0.1
2025-04-21 08:04:29 +02:00
James Cole
d0be9bb957 Merge pull request #10174 from firefly-iii/fix-10114
Fix #10114
2025-04-21 08:04:16 +02:00
James Cole
c25adf0a56 Fix #10114 2025-04-21 08:03:32 +02:00
mergify[bot]
0ca79fd843 Merge branch 'develop' into dependabot/npm_and_yarn/develop/i18next-25.0.1 2025-04-21 05:17:23 +00:00
James Cole
efc516eb3b Merge pull request #10173 from firefly-iii/main
Merge pull request #10170 from firefly-iii/develop
2025-04-21 07:16:48 +02:00
dependabot[bot]
dca3ac9250 Bump i18next from 24.2.3 to 25.0.1
Bumps [i18next](https://github.com/i18next/i18next) from 24.2.3 to 25.0.1.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v24.2.3...v25.0.1)

---
updated-dependencies:
- dependency-name: i18next
  dependency-version: 25.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 04:07:28 +00:00
github-actions[bot]
33668a3688 Merge pull request #10171 from firefly-iii/release-1745205809
🤖 Automatically merge the PR into the develop branch.
2025-04-21 05:23:36 +02:00
JC5
5414a70abb 🤖 Auto commit for release 'develop' on 2025-04-21 2025-04-21 05:23:29 +02:00
github-actions[bot]
85aee63d1e Merge pull request #10170 from firefly-iii/develop
🤖 Automatically merge the PR into the main branch.
2025-04-20 21:22:09 +02:00
github-actions[bot]
ad09c851f6 Merge pull request #10169 from firefly-iii/release-1745176916
🤖 Automatically merge the PR into the develop branch.
2025-04-20 21:22:04 +02:00
JC5
c57f36820b 🤖 Auto commit for release 'v6.2.12' on 2025-04-20 2025-04-20 21:21:56 +02:00
github-actions[bot]
6bb2702e07 Merge pull request #10168 from firefly-iii/release-1745176354
🤖 Automatically merge the PR into the develop branch.
2025-04-20 21:12:43 +02:00
JC5
b1dbd3ee17 🤖 Auto commit for release 'develop' on 2025-04-20 2025-04-20 21:12:34 +02:00
James Cole
2d41db349a Merge pull request #10167 from firefly-iii/update-changelog2
Update changelog
2025-04-20 21:07:06 +02:00
James Cole
6b73b9327a Update changelog 2025-04-20 21:06:27 +02:00
James Cole
e3ea54329d Merge pull request #10166 from firefly-iii/add-events
Add some piggy bank events.
2025-04-20 21:04:27 +02:00
James Cole
686a76f32c Merge pull request #10165 from firefly-iii/fix-10162
Fix #10162
2025-04-20 21:04:07 +02:00
James Cole
cdafb82a49 Merge pull request #10164 from firefly-iii/fix-10068-2
Fix #10068
2025-04-20 21:03:52 +02:00
James Cole
0075f10f98 Fix #10162 2025-04-20 21:02:54 +02:00
James Cole
b70c0e4ab3 Add some piggy bank events. 2025-04-20 21:01:23 +02:00
James Cole
01aca092a1 Fix #10068 2025-04-20 21:00:43 +02:00
James Cole
8e6449ec12 Merge pull request #10161 from firefly-iii/fix-9755
Fix #9755
2025-04-20 12:59:11 +02:00
James Cole
984c4e2449 Fix #9755 2025-04-20 12:58:45 +02:00
James Cole
002c5485f5 Merge pull request #10160 from firefly-iii/fix-9867
Fix #9867
2025-04-20 12:47:35 +02:00
James Cole
12d74f15c0 Fix #9867 2025-04-20 12:47:13 +02:00
James Cole
2e87e179f0 Merge pull request #10159 from firefly-iii/fix-9878
Fix #9878
2025-04-20 12:42:20 +02:00
James Cole
a861126c0f Fix #9878 2025-04-20 12:41:46 +02:00
github-actions[bot]
8f5e58e8ad Merge pull request #10158 from firefly-iii/develop
🤖 Automatically merge the PR into the main branch.
2025-04-20 08:28:36 +02:00
github-actions[bot]
6c26f1f677 Merge pull request #10157 from firefly-iii/release-1745130504
🤖 Automatically merge the PR into the develop branch.
2025-04-20 08:28:32 +02:00
JC5
d7caaca5e4 🤖 Auto commit for release 'v6.2.11' on 2025-04-20 2025-04-20 08:28:25 +02:00
James Cole
835c81f329 Merge pull request #10156 from firefly-iii/jumble
Intentional code jumbling. This needs improvement in the action.
2025-04-20 08:24:36 +02:00
James Cole
1615b0cb29 Intentional code jumbling. This needs improvement in the action. 2025-04-20 08:24:16 +02:00
github-actions[bot]
c07a279c81 Merge pull request #10154 from firefly-iii/release-1745129634
🤖 Automatically merge the PR into the develop branch.
2025-04-20 08:14:00 +02:00
JC5
1478dae316 🤖 Auto commit for release 'v6.2.11' on 2025-04-20 2025-04-20 08:13:54 +02:00
github-actions[bot]
83a1e6616a Merge pull request #10153 from firefly-iii/release-1745129251
🤖 Automatically merge the PR into the develop branch.
2025-04-20 08:07:38 +02:00
JC5
66bd786842 🤖 Auto commit for release 'develop' on 2025-04-20 2025-04-20 08:07:31 +02:00
James Cole
33d73d8be8 Merge pull request #10152 from firefly-iii/update-changelog
Update changelog
2025-04-20 08:02:55 +02:00
James Cole
75e190ba64 Update changelog 2025-04-20 08:02:22 +02:00
James Cole
820569a52b Merge pull request #10151 from firefly-iii/fix-10150
Fix #10150
2025-04-20 07:57:17 +02:00
James Cole
05005eac32 Fix #10150 2025-04-20 07:56:50 +02:00
James Cole
5aa677c6fb Merge pull request #10146 from firefly-iii/fix-empty-amount
Fix empty amount
2025-04-19 10:16:05 +02:00
James Cole
456a3a9216 Fix empty amount 2025-04-19 10:15:50 +02:00
James Cole
be25a7596f Merge pull request #10145 from firefly-iii/fix-10015
Fix #10015
2025-04-19 10:08:27 +02:00
James Cole
59a07e5dde Fix #10015 2025-04-19 10:08:03 +02:00
github-actions[bot]
6946a815e2 Merge pull request #10143 from firefly-iii/release-1745034848
🤖 Automatically merge the PR into the develop branch.
2025-04-19 05:54:14 +02:00
JC5
4a84e94022 🤖 Auto commit for release 'develop' on 2025-04-19 2025-04-19 05:54:08 +02:00
James Cole
5ba5d1f90e Merge pull request #10142 from firefly-iii/add-expires
Add expiry details to tokens.
2025-04-19 05:49:09 +02:00
James Cole
beb2bbcdc9 Merge pull request #10141 from firefly-iii/fix-nullpointer
Fix nullpointer in bill chart controller.
2025-04-19 05:48:37 +02:00
James Cole
805fd5ae08 Add expiry details to tokens. 2025-04-19 05:48:11 +02:00
James Cole
96093e313a Fix nullpointer in bill chart controller. 2025-04-19 05:47:43 +02:00
James Cole
afe9e88f9a Merge pull request #10133 from firefly-iii/new-currencies
Add new currencies and update exchange rates.
2025-04-15 04:59:49 +02:00
James Cole
b43048c674 Add new currencies and update exchange rates. 2025-04-15 04:54:36 +02:00
github-actions[bot]
11c38a599b Merge pull request #10127 from firefly-iii/release-1744600947
🤖 Automatically merge the PR into the develop branch.
2025-04-14 05:22:37 +02:00
JC5
0ce245f480 🤖 Auto commit for release 'develop' on 2025-04-14 2025-04-14 05:22:27 +02:00
github-actions[bot]
aef15cf3d3 Merge pull request #10119 from firefly-iii/release-1744394417
🤖 Automatically merge the PR into the develop branch.
2025-04-11 20:00:28 +02:00
JC5
d1880de30e 🤖 Auto commit for release 'develop' on 2025-04-11 2025-04-11 20:00:17 +02:00
James Cole
9d900a69ed Merge pull request #10118 from firefly-iii/main
Merge security improvements.
2025-04-11 19:45:15 +02:00
James Cole
1653f77b15 Merge pull request #10117 from firefly-iii/fix-10114
Possible fix for #10114
2025-04-11 19:40:36 +02:00
James Cole
9418436d51 Possible fix for #10114 2025-04-11 19:38:48 +02:00
James Cole
1c9a6a194a Merge pull request #10115 from firefly-iii/dependabot/npm_and_yarn/npm_and_yarn-b7c6efa8f1 2025-04-11 18:59:39 +02:00
dependabot[bot]
11cfb5a962 Bump vite in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.2.5 to 6.2.6
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.2.6
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-11 15:37:30 +00:00
James Cole
7d21467447 Merge pull request #10110 from firefly-iii/add-ip
Add IP to failed login message.
2025-04-09 21:28:34 +02:00
James Cole
5ce9f32deb Add IP to failed login message. 2025-04-09 21:26:29 +02:00
James Cole
337440259f Merge pull request #10109 from firefly-iii/fix-9398
Fix #9398
2025-04-07 20:43:37 +02:00
James Cole
c483e0768f Fix #9398 2025-04-07 20:42:52 +02:00
James Cole
fd9b0d9417 Merge pull request #10108 from firefly-iii/fix-9858
Whoops
2025-04-07 19:48:52 +02:00
James Cole
c3165f4937 Whoops 2025-04-07 19:48:30 +02:00
James Cole
a5c9adc872 Merge pull request #10107 from firefly-iii/fix-9858
Fix #9858
2025-04-07 19:45:33 +02:00
James Cole
59cc007931 Fix #9858 2025-04-07 19:44:22 +02:00
github-actions[bot]
8b0b12b521 Merge pull request #10103 from firefly-iii/release-1743996054
🤖 Automatically merge the PR into the develop branch.
2025-04-07 05:21:01 +02:00
JC5
6ae1cfd82e 🤖 Auto commit for release 'develop' on 2025-04-07 2025-04-07 05:20:54 +02:00
github-actions[bot]
4d7eb27fd0 Merge pull request #10102 from firefly-iii/release-1743913710
🤖 Automatically merge the PR into the develop branch.
2025-04-06 06:28:37 +02:00
JC5
fe0b8d0128 🤖 Auto commit for release 'develop' on 2025-04-06 2025-04-06 06:28:30 +02:00
James Cole
04f0fcfbf7 Merge pull request #10101 from firefly-iii/fix-null-pointer
Fix nullpointer.
2025-04-06 06:24:02 +02:00
James Cole
7e182cf070 Fix nullpointer. 2025-04-06 06:22:32 +02:00
James Cole
ad78c302ef Merge branch 'main' into develop
# Conflicts:
#	package-lock.json
2025-04-06 06:22:04 +02:00
James Cole
36b4c69491 Merge pull request #10097 from firefly-iii/dependabot/npm_and_yarn/npm_and_yarn-2bd33993d4
Bump vite from 6.2.4 to 6.2.5 in the npm_and_yarn group across 1 directory
2025-04-05 07:23:09 +02:00
dependabot[bot]
30bd0711f4 Bump vite in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.2.4 to 6.2.5
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.2.5
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-04 15:59:25 +00:00
github-actions[bot]
d847827584 Merge pull request #10095 from firefly-iii/release-1743669036
🤖 Automatically merge the PR into the develop branch.
2025-04-03 10:30:45 +02:00
JC5
786c1fcd58 🤖 Auto commit for release 'develop' on 2025-04-03 2025-04-03 10:30:36 +02:00
James Cole
90e7f0c0f7 Merge pull request #10094 from firefly-iii/fix-more
Fix lint errors
2025-04-03 10:26:17 +02:00
Sander Dorigo
63f334abe5 Fix lint errors 2025-04-03 10:25:24 +02:00
James Cole
2466cd942f Update release.yml
Signed-off-by: James Cole <james@firefly-iii.org>
2025-04-03 10:22:09 +02:00
James Cole
ea37db87f4 Merge pull request #10093 from firefly-iii/fix-php-error
Fix dumb error
2025-04-03 10:13:52 +02:00
Sander Dorigo
c168fb6960 Fix dumb error 2025-04-03 10:13:06 +02:00
github-actions[bot]
03fb707b93 Merge pull request #10092 from firefly-iii/release-1743665835
🤖 Automatically merge the PR into the develop branch.
2025-04-03 09:37:23 +02:00
JC5
db226c2584 🤖 Auto commit for release 'develop' on 2025-04-03 2025-04-03 09:37:15 +02:00
James Cole
1c6ec82c91 Merge pull request #10091 from firefly-iii/better-mute
Better mute
2025-04-03 09:33:26 +02:00
Sander Dorigo
40eb77ffde Better mute 2025-04-03 09:32:41 +02:00
github-actions[bot]
17ddb01cd1 Merge pull request #10089 from firefly-iii/release-1743601357
🤖 Automatically merge the PR into the develop branch.
2025-04-02 15:42:46 +02:00
JC5
ca56c7af70 🤖 Auto commit for release 'develop' on 2025-04-02 2025-04-02 15:42:37 +02:00
James Cole
55c428070f Merge pull request #10087 from firefly-iii/fix-10025
Fix #10025
2025-04-02 12:13:28 +02:00
Sander Dorigo
574eec1c08 Fix #10025 2025-04-02 12:12:18 +02:00
James Cole
15cde8173e Merge pull request #10081 from firefly-iii/debug-10068
Add debug for #10068
2025-04-01 11:29:23 +02:00
Sander Dorigo
ccb581b4ee Add debug for #10068 2025-04-01 11:28:12 +02:00
James Cole
c5f8db5b50 Merge pull request #10080 from firefly-iii/fix-10069-2
fix #10069
2025-04-01 10:54:54 +02:00
Sander Dorigo
611748fbaf fix #10069 2025-04-01 10:54:08 +02:00
James Cole
b57dfa9432 Merge pull request #10078 from firefly-iii/fix-10069
Fix #10069
2025-04-01 10:35:22 +02:00
Sander Dorigo
253982d579 Fix #10069 2025-04-01 10:33:58 +02:00
James Cole
94c7a19aa0 Merge pull request #10076 from firefly-iii/mute-notifications
Fix #10069
2025-04-01 07:27:31 +02:00
Sander Dorigo
e9b360a721 Fix #10069 2025-04-01 07:26:29 +02:00
github-actions[bot]
ebf7f5932a Merge pull request #10075 from firefly-iii/release-1743484026
🤖 Automatically merge the PR into the develop branch.
2025-04-01 07:07:14 +02:00
JC5
4427f2fb99 🤖 Auto commit for release 'develop' on 2025-04-01 2025-04-01 07:07:06 +02:00
James Cole
6626dfbac3 Merge pull request #10074 from firefly-iii/mute-notifications
Mute notifications for demo site.
2025-04-01 07:02:58 +02:00
Sander Dorigo
093a6387a2 Mute notifications for demo site. 2025-04-01 06:59:55 +02:00
James Cole
21ddde9e0d Merge pull request #10072 from firefly-iii/dependabot/npm_and_yarn/npm_and_yarn-8ec3883370 2025-03-31 21:07:21 +02:00
dependabot[bot]
44d4e4e6da Bump vite in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.2.3 to 6.2.4
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-31 18:43:22 +00:00
James Cole
e34e53eeb3 Merge pull request #10055 from firefly-iii/dependabot/composer/develop/guzzlehttp/guzzle-7.9.3
Bump guzzlehttp/guzzle from 7.9.2 to 7.9.3
2025-03-31 11:04:47 +02:00
James Cole
07fb45bb34 Merge pull request #10056 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-2.1.11
Bump phpstan/phpstan from 2.1.10 to 2.1.11
2025-03-31 11:04:34 +02:00
mergify[bot]
d381669733 Merge branch 'develop' into dependabot/composer/develop/guzzlehttp/guzzle-7.9.3 2025-03-31 07:20:41 +00:00
mergify[bot]
fb9eb15ae1 Merge branch 'develop' into dependabot/composer/develop/phpstan/phpstan-2.1.11 2025-03-31 07:20:36 +00:00
mergify[bot]
a933b49e7c Merge branch 'develop' into dependabot/composer/develop/guzzlehttp/guzzle-7.9.3 2025-03-31 07:15:55 +00:00
mergify[bot]
38bcd610df Merge branch 'develop' into dependabot/composer/develop/phpstan/phpstan-2.1.11 2025-03-31 07:15:49 +00:00
mergify[bot]
c11fddb097 Merge branch 'develop' into dependabot/composer/develop/guzzlehttp/guzzle-7.9.3 2025-03-31 07:13:06 +00:00
mergify[bot]
98f79cd9bf Merge branch 'develop' into dependabot/composer/develop/phpstan/phpstan-2.1.11 2025-03-31 07:13:03 +00:00
mergify[bot]
361e95f102 Merge branch 'develop' into dependabot/composer/develop/guzzlehttp/guzzle-7.9.3 2025-03-31 07:07:16 +00:00
mergify[bot]
be212e7d1d Merge branch 'develop' into dependabot/composer/develop/phpstan/phpstan-2.1.11 2025-03-31 07:07:13 +00:00
mergify[bot]
0b4d7ad95e Merge branch 'develop' into dependabot/composer/develop/guzzlehttp/guzzle-7.9.3 2025-03-31 07:03:39 +00:00
mergify[bot]
7acbfb230a Merge branch 'develop' into dependabot/composer/develop/phpstan/phpstan-2.1.11 2025-03-31 07:03:36 +00:00
dependabot[bot]
f505580b33 Bump phpstan/phpstan from 2.1.10 to 2.1.11
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 2.1.10 to 2.1.11.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/2.1.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/2.1.10...2.1.11)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-31 03:10:51 +00:00
dependabot[bot]
270f932a48 Bump guzzlehttp/guzzle from 7.9.2 to 7.9.3
Bumps [guzzlehttp/guzzle](https://github.com/guzzle/guzzle) from 7.9.2 to 7.9.3.
- [Release notes](https://github.com/guzzle/guzzle/releases)
- [Changelog](https://github.com/guzzle/guzzle/blob/7.9/CHANGELOG.md)
- [Commits](https://github.com/guzzle/guzzle/compare/7.9.2...7.9.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-31 03:10:43 +00:00
494 changed files with 3219 additions and 3146 deletions

View File

@@ -406,16 +406,16 @@
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v3.74.0",
"version": "v3.75.0",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "6b7cb12a6cf592fd9a2b46a2d5d4c3b44003973d"
"reference": "399a128ff2fdaf4281e4e79b755693286cdf325c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/6b7cb12a6cf592fd9a2b46a2d5d4c3b44003973d",
"reference": "6b7cb12a6cf592fd9a2b46a2d5d4c3b44003973d",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/399a128ff2fdaf4281e4e79b755693286cdf325c",
"reference": "399a128ff2fdaf4281e4e79b755693286cdf325c",
"shasum": ""
},
"require": {
@@ -498,7 +498,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.74.0"
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.75.0"
},
"funding": [
{
@@ -506,7 +506,7 @@
"type": "github"
}
],
"time": "2025-03-27T22:31:30+00:00"
"time": "2025-03-31T18:40:42+00:00"
},
{
"name": "psr/container",
@@ -1256,16 +1256,16 @@
},
{
"name": "symfony/console",
"version": "v7.2.5",
"version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "e51498ea18570c062e7df29d05a7003585b19b88"
"reference": "0e2e3f38c192e93e622e41ec37f4ca70cfedf218"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/e51498ea18570c062e7df29d05a7003585b19b88",
"reference": "e51498ea18570c062e7df29d05a7003585b19b88",
"url": "https://api.github.com/repos/symfony/console/zipball/0e2e3f38c192e93e622e41ec37f4ca70cfedf218",
"reference": "0e2e3f38c192e93e622e41ec37f4ca70cfedf218",
"shasum": ""
},
"require": {
@@ -1329,7 +1329,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v7.2.5"
"source": "https://github.com/symfony/console/tree/v7.2.6"
},
"funding": [
{
@@ -1345,7 +1345,7 @@
"type": "tidelift"
}
],
"time": "2025-03-12T08:11:12+00:00"
"time": "2025-04-07T19:09:28+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -1769,7 +1769,7 @@
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.31.0",
"version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
@@ -1828,7 +1828,7 @@
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0"
},
"funding": [
{
@@ -1848,7 +1848,7 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.31.0",
"version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
@@ -1906,7 +1906,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0"
},
"funding": [
{
@@ -1926,7 +1926,7 @@
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.31.0",
"version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -1987,7 +1987,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0"
},
"funding": [
{
@@ -2007,19 +2007,20 @@
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.31.0",
"version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
"shasum": ""
},
"require": {
"ext-iconv": "*",
"php": ">=7.2"
},
"provide": {
@@ -2067,7 +2068,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
},
"funding": [
{
@@ -2083,20 +2084,20 @@
"type": "tidelift"
}
],
"time": "2024-09-09T11:45:10+00:00"
"time": "2024-12-23T08:48:59+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.31.0",
"version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"shasum": ""
},
"require": {
@@ -2147,7 +2148,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
},
"funding": [
{
@@ -2163,11 +2164,11 @@
"type": "tidelift"
}
],
"time": "2024-09-09T11:45:10+00:00"
"time": "2025-01-02T08:10:11+00:00"
},
{
"name": "symfony/polyfill-php81",
"version": "v1.31.0",
"version": "v1.32.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
@@ -2223,7 +2224,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0"
},
"funding": [
{
@@ -2449,16 +2450,16 @@
},
{
"name": "symfony/string",
"version": "v7.2.0",
"version": "v7.2.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "446e0d146f991dde3e73f45f2c97a9faad773c82"
"reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82",
"reference": "446e0d146f991dde3e73f45f2c97a9faad773c82",
"url": "https://api.github.com/repos/symfony/string/zipball/a214fe7d62bd4df2a76447c67c6b26e1d5e74931",
"reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931",
"shasum": ""
},
"require": {
@@ -2516,7 +2517,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v7.2.0"
"source": "https://github.com/symfony/string/tree/v7.2.6"
},
"funding": [
{
@@ -2532,7 +2533,7 @@
"type": "tidelift"
}
],
"time": "2024-11-13T13:31:26+00:00"
"time": "2025-04-20T20:18:16+00:00"
}
],
"packages-dev": [],

21
.ci/rector.php Normal file
View File

@@ -0,0 +1,21 @@
<?php
declare(strict_types=1);
use Rector\Config\RectorConfig;
return RectorConfig::configure()
->withPaths([
__DIR__ . '/../app',
__DIR__ . '/../bootstrap',
__DIR__ . '/../config',
__DIR__ . '/../public',
__DIR__ . '/../resources',
__DIR__ . '/../routes',
__DIR__ . '/../tests',
])
// uncomment to reach your current PHP version
->withPhpSets()
->withTypeCoverageLevel(0)
->withDeadCodeLevel(0)
->withCodeQualityLevel(0);

28
.ci/rector.sh Executable file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/env bash
#
# phpstan.sh
# Copyright (c) 2021 james@firefly-iii.org
#
# This file is part of Firefly III (https://github.com/firefly-iii).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
# Install composer packages
#composer install --no-scripts --no-ansi
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
$SCRIPT_DIR/../vendor/bin/rector --config $SCRIPT_DIR/rector.php

View File

@@ -164,6 +164,13 @@ MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_SENDMAIL_COMMAND=
#
# If you use self-signed certificates for your STMP server, you can use the following settings.
#
MAIL_ALLOW_SELF_SIGNED=false
MAIL_VERIFY_PEER=true
MAIL_VERIFY_PEER_NAME=true
# Other mail drivers:
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
MAILGUN_DOMAIN=

View File

@@ -21,5 +21,3 @@ Changes in this pull request:
-
-
-
@JC5

View File

@@ -59,7 +59,28 @@ jobs:
git config user.email release@firefly-iii.org
git config advice.addIgnoredFile false
git config push.autoSetupRemote true
- name: crowdin action
- name: Lint PHP
run: |
php_lint_file()
{
local php_file="$1"
php -l "$php_file" &> /dev/null
if [ "$?" -ne 0 ]
then
echo -e "[FAIL] $php_file"
return 1
fi
}
export -f php_lint_file
find . -path ./vendor -prune -o -name '*.php' | parallel -j 4 php_lint_file {}
if [ "$?" -ne 0 ]
then
exit 1
fi
- name: Crowdin action
uses: crowdin/github-action@v2
with:
upload_sources: true

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.
## 2025
- Denis Iskandarov
- =
- Lompi
- Jose Diaz-Gonzalez

View File

@@ -65,13 +65,11 @@ class BillController extends Controller
$data = $request->getData();
$result = $this->repository->searchBill($data['query'], $this->parameters->get('limit'));
$filtered = $result->map(
static function (Bill $item) {
return [
'id' => (string) $item->id,
'name' => $item->name,
'active' => $item->active,
];
}
static fn (Bill $item) => [
'id' => (string) $item->id,
'name' => $item->name,
'active' => $item->active,
]
);
return response()->api($filtered->toArray());

View File

@@ -65,12 +65,10 @@ class BudgetController extends Controller
$data = $request->getData();
$result = $this->repository->searchBudget($data['query'], $this->parameters->get('limit'));
$filtered = $result->map(
static function (Budget $item) {
return [
'id' => (string) $item->id,
'name' => $item->name,
];
}
static fn (Budget $item) => [
'id' => (string) $item->id,
'name' => $item->name,
]
);
return response()->api($filtered->toArray());

View File

@@ -65,12 +65,10 @@ class CategoryController extends Controller
$data = $request->getData();
$result = $this->repository->searchCategory($data['query'], $this->parameters->get('limit'));
$filtered = $result->map(
static function (Category $item) {
return [
'id' => (string) $item->id,
'name' => $item->name,
];
}
static fn (Category $item) => [
'id' => (string) $item->id,
'name' => $item->name,
]
);
return response()->api($filtered->toArray());

View File

@@ -193,7 +193,7 @@ class BudgetController extends Controller
// var_dump($return);
/** @var array $journal */
foreach ($currentBudgetArray['transaction_journals'] as $journal) {
$return[$currencyId]['spent'] = bcadd($return[$currencyId]['spent'], $journal['amount']);
$return[$currencyId]['spent'] = bcadd($return[$currencyId]['spent'], (string) $journal['amount']);
}
}
@@ -245,13 +245,13 @@ class BudgetController extends Controller
}
$result = $this->processExpenses($budget->id, $filtered, $limit->start_date, $end);
if (1 === count($result)) {
$compare = bccomp($limit->amount, app('steam')->positive($result[$limitCurrencyId]['spent']));
$compare = bccomp($limit->amount, (string) app('steam')->positive($result[$limitCurrencyId]['spent']));
if (1 === $compare) {
// convert this amount into the native currency:
$result[$limitCurrencyId]['left'] = bcadd($limit->amount, $result[$limitCurrencyId]['spent']);
$result[$limitCurrencyId]['left'] = bcadd($limit->amount, (string) $result[$limitCurrencyId]['spent']);
}
if ($compare <= 0) {
$result[$limitCurrencyId]['overspent'] = app('steam')->positive(bcadd($limit->amount, $result[$limitCurrencyId]['spent']));
$result[$limitCurrencyId]['overspent'] = app('steam')->positive(bcadd($limit->amount, (string) $result[$limitCurrencyId]['spent']));
}
}

View File

@@ -96,7 +96,7 @@ class CategoryController extends Controller
$currencyId = (int) $journal['currency_id'];
$currency = $currencies[$currencyId] ?? $this->currencyRepos->find($currencyId);
$currencies[$currencyId] = $currency;
$categoryName = null === $journal['category_name'] ? (string) trans('firefly.no_category') : $journal['category_name'];
$categoryName = $journal['category_name'] ?? (string) trans('firefly.no_category');
$amount = app('steam')->positive($journal['amount']);
$key = sprintf('%s-%s', $categoryName, $currency->code);
// create arrays
@@ -114,14 +114,12 @@ class CategoryController extends Controller
];
// add monies
$return[$key]['amount'] = bcadd($return[$key]['amount'], $amount);
$return[$key]['amount'] = bcadd($return[$key]['amount'], (string) $amount);
}
$return = array_values($return);
// order by amount
usort($return, static function (array $a, array $b) {
return (float) $a['amount'] < (float) $b['amount'] ? 1 : -1;
});
usort($return, static fn (array $a, array $b) => (float) $a['amount'] < (float) $b['amount'] ? 1 : -1);
return response()->json($this->clean($return));
}

View File

@@ -30,6 +30,8 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Support\Export\ExportDataGenerator;
use Illuminate\Http\Response as LaravelResponse;
use function Safe\date;
/**
* Class ExportController
*/
@@ -88,7 +90,7 @@ class ExportController extends Controller
->header('Expires', '0')
->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
->header('Pragma', 'public')
->header('Content-Length', (string) strlen($data[$key]))
->header('Content-Length', (string) strlen((string) $data[$key]))
;
return $response;

View File

@@ -160,7 +160,7 @@ class TagController extends Controller
'currency_id' => (string) $currencyId,
'currency_code' => $journal['currency_code'],
];
$response[$key]['difference'] = bcadd($response[$key]['difference'], $journal['amount']);
$response[$key]['difference'] = bcadd((string) $response[$key]['difference'], (string) $journal['amount']);
$response[$key]['difference_float'] = (float) $response[$key]['difference']; // float but on purpose.
}
@@ -172,7 +172,7 @@ class TagController extends Controller
'currency_id' => (string) $foreignCurrencyId,
'currency_code' => $journal['foreign_currency_code'],
];
$response[$foreignKey]['difference'] = bcadd($response[$foreignKey]['difference'], $journal['foreign_amount']);
$response[$foreignKey]['difference'] = bcadd((string) $response[$foreignKey]['difference'], (string) $journal['foreign_amount']);
$response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference']; // float but on purpose.
}
}

View File

@@ -75,7 +75,7 @@ class PeriodController extends Controller
'currency_id' => (string) $currencyId,
'currency_code' => $currencyCode,
];
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], app('steam')->positive($journal[$field]));
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], (string) app('steam')->positive($journal[$field]));
$response[$currencyId]['difference_float'] = (float) $response[$currencyId]['difference']; // float but on purpose.
}

View File

@@ -100,7 +100,7 @@ class TagController extends Controller
'currency_id' => (string) $currencyId,
'currency_code' => $currencyCode,
];
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], app('steam')->positive($journal[$field]));
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], (string) app('steam')->positive($journal[$field]));
$response[$currencyId]['difference_float'] = (float) $response[$currencyId]['difference'];
}
@@ -154,7 +154,7 @@ class TagController extends Controller
'currency_id' => (string) $currencyId,
'currency_code' => $journal['currency_code'],
];
$response[$key]['difference'] = bcadd($response[$key]['difference'], app('steam')->positive($journal['amount']));
$response[$key]['difference'] = bcadd((string) $response[$key]['difference'], (string) app('steam')->positive($journal['amount']));
$response[$key]['difference_float'] = (float) $response[$key]['difference'];
}
@@ -167,8 +167,8 @@ class TagController extends Controller
'currency_code' => $journal['foreign_currency_code'],
];
$response[$foreignKey]['difference'] = bcadd(
$response[$foreignKey]['difference'],
app('steam')->positive($journal['foreign_amount'])
(string) $response[$foreignKey]['difference'],
(string) app('steam')->positive($journal['foreign_amount'])
);
$response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference'];
}

View File

@@ -75,7 +75,7 @@ class PeriodController extends Controller
'currency_id' => (string) $currencyId,
'currency_code' => $currencyCode,
];
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], app('steam')->positive($journal[$field]));
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], (string) app('steam')->positive($journal[$field]));
$response[$currencyId]['difference_float'] = (float) $response[$currencyId]['difference'];
}

View File

@@ -99,7 +99,7 @@ class TagController extends Controller
'currency_id' => (string) $currencyId,
'currency_code' => $currencyCode,
];
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], app('steam')->positive($journal[$field]));
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], (string) app('steam')->positive($journal[$field]));
$response[$currencyId]['difference_float'] = (float) $response[$currencyId]['difference'];
}
@@ -153,7 +153,7 @@ class TagController extends Controller
'currency_id' => (string) $currencyId,
'currency_code' => $journal['currency_code'],
];
$response[$key]['difference'] = bcadd($response[$key]['difference'], app('steam')->positive($journal['amount']));
$response[$key]['difference'] = bcadd((string) $response[$key]['difference'], (string) app('steam')->positive($journal['amount']));
$response[$key]['difference_float'] = (float) $response[$key]['difference'];
}
@@ -166,8 +166,8 @@ class TagController extends Controller
'currency_code' => $journal['foreign_currency_code'],
];
$response[$foreignKey]['difference'] = bcadd(
$response[$foreignKey]['difference'],
app('steam')->positive($journal['foreign_amount'])
(string) $response[$foreignKey]['difference'],
(string) app('steam')->positive($journal['foreign_amount'])
);
$response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference']; // intentional float
}

View File

@@ -177,9 +177,7 @@ class ListController extends Controller
// filter and paginate list:
$collection = $unfiltered->filter(
static function (Bill $bill) use ($currency) {
return $bill->transaction_currency_id === $currency->id;
}
static fn (Bill $bill) => $bill->transaction_currency_id === $currency->id
);
$count = $collection->count();
$bills = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);

View File

@@ -43,6 +43,7 @@ use FireflyIII\Support\Http\Api\ExchangeRateConverter;
use FireflyIII\Support\Report\Summarizer\TransactionSummarizer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
/**
@@ -99,16 +100,15 @@ class BasicController extends Controller
$start = $dates['start'];
$end = $dates['end'];
$code = $request->get('currency_code');
// balance information:
$balanceData = $this->getBalanceInformation($start, $end);
$billData = $this->getSubscriptionInformation($start, $end);
$spentData = $this->getLeftToSpendInfo($start, $end);
$netWorthData = $this->getNetWorthInfo($end);
// $balanceData = [];
// $billData = [];
// $balanceData = [];
// $billData = [];
// $spentData = [];
// $netWorthData = [];
// $netWorthData = [];
$total = array_merge($balanceData, $billData, $spentData, $netWorthData);
// give new keys
@@ -191,14 +191,14 @@ class BasicController extends Controller
// if it is the native currency already.
if ($entry['currency_id'] === $default->id) {
$sums[$default->id]['sum'] = bcadd($entry['sum'], $sums[$default->id]['sum']);
$sums[$default->id]['sum'] = bcadd((string) $entry['sum'], $sums[$default->id]['sum']);
// don't forget to add it to newExpenses and newIncome
if (0 === $index) {
$newExpenses[$default->id]['sum'] = bcadd($newExpenses[$default->id]['sum'], $entry['sum']);
$newExpenses[$default->id]['sum'] = bcadd($newExpenses[$default->id]['sum'], (string) $entry['sum']);
}
if (1 === $index) {
$newIncomes[$default->id]['sum'] = bcadd($newIncomes[$default->id]['sum'], $entry['sum']);
$newIncomes[$default->id]['sum'] = bcadd($newIncomes[$default->id]['sum'], (string) $entry['sum']);
}
continue;
@@ -229,7 +229,7 @@ class BasicController extends Controller
'currency_decimal_places' => $entry['currency_decimal_places'],
'sum' => '0',
];
$sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['sum'], $entry['sum']);
$sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['sum'], (string) $entry['sum']);
}
}
}
@@ -362,7 +362,7 @@ class BasicController extends Controller
if (0 === $index) {
// paid amount
if ($currencyId === $this->nativeCurrency->id) {
$newPaidAmount[0]['sum'] = bcadd($newPaidAmount[0]['sum'], $item['sum']);
$newPaidAmount[0]['sum'] = bcadd($newPaidAmount[0]['sum'], (string) $item['sum']);
continue;
}
@@ -374,7 +374,7 @@ class BasicController extends Controller
}
// unpaid amount
if ($currencyId === $this->nativeCurrency->id) {
$newUnpaidAmount[0]['sum'] = bcadd($newUnpaidAmount[0]['sum'], $item['sum']);
$newUnpaidAmount[0]['sum'] = bcadd($newUnpaidAmount[0]['sum'], (string) $item['sum']);
continue;
}
@@ -397,7 +397,7 @@ class BasicController extends Controller
* @var array $info
*/
foreach ($paidAmount as $info) {
$amount = bcmul($info['sum'], '-1');
$amount = bcmul((string) $info['sum'], '-1');
$return[] = [
'key' => sprintf('bills-paid-in-%s', $info['code']),
'title' => trans('firefly.box_bill_paid_in_currency', ['currency' => $info['symbol']]),
@@ -416,7 +416,7 @@ class BasicController extends Controller
* @var array $info
*/
foreach ($unpaidAmount as $info) {
$amount = bcmul($info['sum'], '-1');
$amount = bcmul((string) $info['sum'], '-1');
$return[] = [
'key' => sprintf('bills-unpaid-in-%s', $info['code']),
'title' => trans('firefly.box_bill_unpaid_in_currency', ['currency' => $info['symbol']]),
@@ -471,30 +471,60 @@ class BasicController extends Controller
*/
private function getLeftToSpendInfo(Carbon $start, Carbon $end): array
{
Log::debug(sprintf('Now in getLeftToSpendInfo("%s", "%s")', $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s')));
$return = [];
$today = today(config('app.timezone'));
$available = $this->abRepository->getAvailableBudgetWithCurrency($start, $end);
$budgets = $this->budgetRepository->getActiveBudgets();
$spent = $this->opsRepository->sumExpenses($start, $end, null, $budgets);
$days = (int) $today->diffInDays($end, true) + 1;
Log::debug(sprintf('Now in getLeftToSpendInfo("%s", "%s")', $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s')));
$return = [];
$today = today(config('app.timezone'));
$available = $this->abRepository->getAvailableBudgetWithCurrency($start, $end);
$budgets = $this->budgetRepository->getActiveBudgets();
$spent = $this->opsRepository->sumExpenses($start, $end, null, $budgets);
$days = (int) $today->diffInDays($end, true) + 1;
$currencies = [];
// first, create an entry for each entry in the "available" array.
/** @var array $availableBudget */
foreach ($available as $currencyId => $availableBudget) {
$currencies[$currencyId] ??= $this->currencyRepos->find($currencyId);
$return[$currencyId] = [
'key' => sprintf('left-to-spend-in-%s', $currencies[$currencyId]->code),
'title' => trans('firefly.box_left_to_spend_in_currency', ['currency' => $currencies[$currencyId]->symbol]),
'no_available_budgets' => false,
'monetary_value' => $availableBudget,
'currency_id' => (string) $currencies[$currencyId]->id,
'currency_code' => $currencies[$currencyId]->code,
'currency_symbol' => $currencies[$currencyId]->symbol,
'currency_decimal_places' => $currencies[$currencyId]->decimal_places,
'value_parsed' => app('amount')->formatFlat($currencies[$currencyId]->symbol, $currencies[$currencyId]->decimal_places, $availableBudget, false),
'local_icon' => 'money',
'sub_title' => app('amount')->formatFlat(
$currencies[$currencyId]->symbol,
$currencies[$currencyId]->decimal_places,
$availableBudget,
false
),
];
}
foreach ($spent as $row) {
// either an amount was budgeted or 0 is available.
$currencyId = $row['currency_id'];
$amount = (string) ($available[$currencyId] ?? '0');
$spentInCurrency = $row['sum'];
$leftToSpend = bcadd($amount, $spentInCurrency);
$perDay = '0';
$currencyId = (int) $row['currency_id'];
$amount = (string) ($available[$currencyId] ?? '0');
if (0 === bccomp($amount, '0')) {
// #9858 skip over currencies with no available budget.
continue;
}
$spentInCurrency = $row['sum'];
$leftToSpend = bcadd($amount, (string) $spentInCurrency);
$perDay = '0';
if (0 !== $days && bccomp($leftToSpend, '0') > -1) {
$perDay = bcdiv($leftToSpend, (string) $days);
}
Log::debug(sprintf('Spent %s %s', $row['currency_code'], $row['sum']));
$return[] = [
$return[$currencyId] = [
'key' => sprintf('left-to-spend-in-%s', $row['currency_code']),
'title' => trans('firefly.box_left_to_spend_in_currency', ['currency' => $row['currency_symbol']]),
'no_available_budgets' => false,
'monetary_value' => $leftToSpend,
'currency_id' => (string) $row['currency_id'],
'currency_code' => $row['currency_code'],
@@ -510,28 +540,66 @@ class BasicController extends Controller
),
];
}
unset($leftToSpend);
if (0 === count($return)) {
$currency = $this->nativeCurrency;
$return[] = [
'key' => sprintf('left-to-spend-in-%s', $currency->code),
'title' => trans('firefly.box_left_to_spend_in_currency', ['currency' => $currency->symbol]),
'monetary_value' => '0',
'currency_id' => (string) $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places,
'value_parsed' => app('amount')->formatFlat($currency->symbol, $currency->decimal_places, '0', false),
'local_icon' => 'money',
'sub_title' => app('amount')->formatFlat(
$currency->symbol,
$currency->decimal_places,
'0',
false
),
];
// a small trick to get every expense in this period, regardless of budget.
$spent = $this->opsRepository->sumExpenses($start, $end, null, new Collection());
foreach ($spent as $row) {
// either an amount was budgeted or 0 is available.
$currencyId = (int) $row['currency_id'];
$spentInCurrency = $row['sum'];
$perDay = '0';
if (0 !== $days && -1 === bccomp((string) $spentInCurrency, '0')) {
$perDay = bcdiv((string) $spentInCurrency, (string) $days);
}
Log::debug(sprintf('Spent %s %s', $row['currency_code'], $row['sum']));
$return[$currencyId] = [
'key' => sprintf('left-to-spend-in-%s', $row['currency_code']),
'title' => trans('firefly.spent'),
'no_available_budgets' => true,
'monetary_value' => $spentInCurrency,
'currency_id' => (string) $row['currency_id'],
'currency_code' => $row['currency_code'],
'currency_symbol' => $row['currency_symbol'],
'currency_decimal_places' => $row['currency_decimal_places'],
'value_parsed' => app('amount')->formatFlat($row['currency_symbol'], $row['currency_decimal_places'], $spentInCurrency, false),
'local_icon' => 'money',
'sub_title' => app('amount')->formatFlat(
$row['currency_symbol'],
$row['currency_decimal_places'],
$perDay,
false
),
];
}
// $amount = '0';
// // $days
// // fill in by money spent, just count it.
// $currency = $this->nativeCurrency;
// $return[$currency->id] = [
// 'key' => sprintf('left-to-spend-in-%s', $currency->code),
// 'title' => trans('firefly.box_left_to_spend_in_currency', ['currency' => $currency->symbol]),
// 'monetary_value' => '0',
// 'no_available_budgets' => true,
// 'currency_id' => (string) $currency->id,
// 'currency_code' => $currency->code,
// 'currency_symbol' => $currency->symbol,
// 'currency_decimal_places' => $currency->decimal_places,
// 'value_parsed' => app('amount')->formatFlat($currency->symbol, $currency->decimal_places, '0', false),
// 'local_icon' => 'money',
// 'sub_title' => app('amount')->formatFlat(
// $currency->symbol,
// $currency->decimal_places,
// '0',
// false
// ),
// ];
}
return $return;
return array_values($return);
}
private function getNetWorthInfo(Carbon $end): array
@@ -563,7 +631,7 @@ class BasicController extends Controller
continue;
}
$amount = $data['balance'];
if (0 === bccomp($amount, '0')) {
if (0 === bccomp((string) $amount, '0')) {
continue;
}
// return stuff

View File

@@ -85,7 +85,7 @@ class ChartRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -74,7 +74,7 @@ class MoveTransactionsRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}

View File

@@ -33,6 +33,8 @@ use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Validator;
use function Safe\json_decode;
/**
* Class TransactionRequest
*/
@@ -74,7 +76,7 @@ class TransactionRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -144,7 +144,7 @@ class UpdateRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -58,9 +58,7 @@ class StoreRequest extends FormRequest
{
$models = config('firefly.valid_attachment_models');
$models = array_map(
static function (string $className) {
return str_replace('FireflyIII\Models\\', '', $className);
},
static fn (string $className) => str_replace('FireflyIII\Models\\', '', $className),
$models
);
$models = implode(',', $models);

View File

@@ -60,9 +60,7 @@ class UpdateRequest extends FormRequest
{
$models = config('firefly.valid_attachment_models');
$models = array_map(
static function (string $className) {
return str_replace('FireflyIII\Models\\', '', $className);
},
static fn (string $className) => str_replace('FireflyIII\Models\\', '', $className),
$models
);
$models = implode(',', $models);

View File

@@ -90,7 +90,7 @@ class Request extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -129,7 +129,7 @@ class StoreRequest extends FormRequest
$failed = false;
}
if ($failed) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -110,7 +110,7 @@ class UpdateRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -94,7 +94,7 @@ class StoreRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -106,7 +106,7 @@ class UpdateRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -96,7 +96,7 @@ class UpdateRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -126,7 +126,7 @@ class StoreRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}

View File

@@ -193,7 +193,7 @@ class StoreRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -208,7 +208,7 @@ class UpdateRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -148,7 +148,7 @@ class StoreRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}

View File

@@ -168,7 +168,7 @@ class UpdateRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}

View File

@@ -300,7 +300,7 @@ class StoreRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -359,7 +359,7 @@ class UpdateRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -80,7 +80,7 @@ class StoreRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}

View File

@@ -80,7 +80,7 @@ class UpdateRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}

View File

@@ -99,7 +99,7 @@ class UserUpdateRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -61,13 +61,11 @@ class CategoryController extends Controller
$queryParameters = $request->getParameters();
$result = $this->repository->searchCategory($queryParameters['query'], $queryParameters['size']);
$filtered = $result->map(
static function (Category $item) {
return [
'id' => (string) $item->id,
'title' => $item->name,
'meta' => [],
];
}
static fn (Category $item) => [
'id' => (string) $item->id,
'title' => $item->name,
'meta' => [],
]
);
return response()->json($filtered);

View File

@@ -61,15 +61,13 @@ class TagController extends Controller
$queryParameters = $request->getParameters();
$result = $this->repository->searchTag($queryParameters['query']);
$filtered = $result->map(
static function (Tag $item) {
return [
'id' => (string) $item->id,
'title' => $item->tag,
'value' => (string) $item->id,
'label' => $item->tag,
'meta' => [],
];
}
static fn (Tag $item) => [
'id' => (string) $item->id,
'title' => $item->tag,
'value' => (string) $item->id,
'label' => $item->tag,
'meta' => [],
]
);
return response()->json($filtered);

View File

@@ -212,13 +212,13 @@ class BudgetController extends Controller
foreach ($currentBudgetArray['transaction_journals'] as $journal) {
// convert the amount to the native currency.
$rate = $converter->getCurrencyRate($this->currencies[$currencyId], $this->currency, $journal['date']);
$convertedAmount = bcmul($journal['amount'], $rate);
$convertedAmount = bcmul((string) $journal['amount'], $rate);
if ($journal['foreign_currency_id'] === $this->currency->id) {
$convertedAmount = $journal['foreign_amount'];
}
$return[$currencyId]['spent'] = bcadd($return[$currencyId]['spent'], $journal['amount']);
$return[$currencyId]['native_spent'] = bcadd($return[$currencyId]['native_spent'], $convertedAmount);
$return[$currencyId]['spent'] = bcadd($return[$currencyId]['spent'], (string) $journal['amount']);
$return[$currencyId]['native_spent'] = bcadd($return[$currencyId]['native_spent'], (string) $convertedAmount);
}
}
$converter->summarize();
@@ -275,15 +275,15 @@ class BudgetController extends Controller
}
$result = $this->processExpenses($budget->id, $filtered, $limit->start_date, $end);
if (1 === count($result)) {
$compare = bccomp($limit->amount, app('steam')->positive($result[$limitCurrencyId]['spent']));
$compare = bccomp($limit->amount, (string) app('steam')->positive($result[$limitCurrencyId]['spent']));
if (1 === $compare) {
// convert this amount into the native currency:
$result[$limitCurrencyId]['left'] = bcadd($limit->amount, $result[$limitCurrencyId]['spent']);
$result[$limitCurrencyId]['native_left'] = bcadd($convertedLimitAmount, $result[$limitCurrencyId]['native_spent']);
$result[$limitCurrencyId]['left'] = bcadd($limit->amount, (string) $result[$limitCurrencyId]['spent']);
$result[$limitCurrencyId]['native_left'] = bcadd($convertedLimitAmount, (string) $result[$limitCurrencyId]['native_spent']);
}
if ($compare <= 0) {
$result[$limitCurrencyId]['overspent'] = app('steam')->positive(bcadd($limit->amount, $result[$limitCurrencyId]['spent']));
$result[$limitCurrencyId]['native_overspent'] = app('steam')->positive(bcadd($convertedLimitAmount, $result[$limitCurrencyId]['native_spent']));
$result[$limitCurrencyId]['overspent'] = app('steam')->positive(bcadd($limit->amount, (string) $result[$limitCurrencyId]['spent']));
$result[$limitCurrencyId]['native_overspent'] = app('steam')->positive(bcadd($convertedLimitAmount, (string) $result[$limitCurrencyId]['native_spent']));
}
}
$converter->summarize();

View File

@@ -100,7 +100,7 @@ class CategoryController extends Controller
$currencyId = (int) $journal['currency_id'];
$currency = $currencies[$currencyId] ?? $this->currencyRepos->find($currencyId);
$currencies[$currencyId] = $currency;
$categoryName = null === $journal['category_name'] ? (string) trans('firefly.no_category') : $journal['category_name'];
$categoryName = $journal['category_name'] ?? (string) trans('firefly.no_category');
$amount = app('steam')->positive($journal['amount']);
$nativeAmount = $converter->convert($default, $currency, $journal['date'], $amount);
$key = sprintf('%s-%s', $categoryName, $currency->code);
@@ -128,15 +128,13 @@ class CategoryController extends Controller
];
// add monies
$return[$key]['amount'] = bcadd($return[$key]['amount'], $amount);
$return[$key]['native_amount'] = bcadd($return[$key]['native_amount'], $nativeAmount);
$return[$key]['amount'] = bcadd($return[$key]['amount'], (string) $amount);
$return[$key]['native_amount'] = bcadd($return[$key]['native_amount'], (string) $nativeAmount);
}
$return = array_values($return);
// order by native amount
usort($return, static function (array $a, array $b) {
return (float) $a['native_amount'] < (float) $b['native_amount'] ? 1 : -1;
});
usort($return, static fn (array $a, array $b) => (float) $a['native_amount'] < (float) $b['native_amount'] ? 1 : -1);
$converter->summarize();
return response()->json($this->clean($return));

View File

@@ -174,8 +174,8 @@ class BasicController extends Controller
* @var array $info
*/
foreach ($paidAmount as $info) {
$amount = bcmul($info['sum'], '-1');
$nativeAmount = bcmul($info['native_sum'], '-1');
$amount = bcmul((string) $info['sum'], '-1');
$nativeAmount = bcmul((string) $info['native_sum'], '-1');
$return[] = [
'key' => sprintf('bills-paid-in-%s', $info['currency_code']),
'value' => $amount,
@@ -198,8 +198,8 @@ class BasicController extends Controller
* @var array $info
*/
foreach ($unpaidAmount as $info) {
$amount = bcmul($info['sum'], '-1');
$nativeAmount = bcmul($info['native_sum'], '-1');
$amount = bcmul((string) $info['sum'], '-1');
$nativeAmount = bcmul((string) $info['native_sum'], '-1');
$return[] = [
'key' => sprintf('bills-unpaid-in-%s', $info['currency_code']),
'value' => $amount,
@@ -279,8 +279,8 @@ class BasicController extends Controller
if ((int) $journal['foreign_currency_id'] === $default->id) {
$amountNative = $journal['foreign_amount'];
}
$spent = bcadd($spent, $amount);
$spentNative = bcadd($spentNative, $amountNative);
$spent = bcadd($spent, (string) $amount);
$spentNative = bcadd($spentNative, (string) $amountNative);
}
app('log')->debug(sprintf('Total spent in budget "%s" is %s', $budget['name'], $spent));
}

View File

@@ -84,7 +84,7 @@ class BalanceChartRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -86,7 +86,7 @@ class ChartRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -83,7 +83,7 @@ class DashboardChartRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -311,7 +311,7 @@ class StoreRequest extends FormRequest
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -64,6 +64,7 @@ class UpdateRequest extends Request
*
* @throws FireflyException
*/
#[\Override]
public function getAll(): array
{
app('log')->debug(sprintf('Now in %s', __METHOD__));
@@ -247,6 +248,7 @@ class UpdateRequest extends Request
/**
* The rules that the incoming request must be matched against.
*/
#[\Override]
public function rules(): array
{
app('log')->debug(sprintf('Now in %s', __METHOD__));
@@ -330,6 +332,7 @@ class UpdateRequest extends Request
/**
* Configure the validator instance.
*/
#[\Override]
public function withValidator(Validator $validator): void
{
app('log')->debug('Now in withValidator');
@@ -361,7 +364,7 @@ class UpdateRequest extends Request
}
);
if ($validator->fails()) {
Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray());
Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray());
}
}
}

View File

@@ -175,7 +175,7 @@ class CorrectsAmounts extends Command
{
try {
$check = bccomp((string) $item->trigger_value, '0');
} catch (\ValueError $e) {
} catch (\ValueError) {
$this->friendlyError(sprintf('Rule #%d contained invalid %s-trigger "%s". The trigger has been removed, and the rule is disabled.', $item->rule_id, $item->trigger_type, $item->trigger_value));
$item->rule->active = false;
$item->rule->save();

View File

@@ -115,9 +115,7 @@ class CorrectsCurrencies extends Command
$found = array_values(
array_filter(
$found,
static function (int $currencyId) {
return 0 !== $currencyId;
}
static fn (int $currencyId) => 0 !== $currencyId
)
);

View File

@@ -48,8 +48,8 @@ class CorrectsLongDescriptions extends Command
/** @var TransactionJournal $journal */
foreach ($journals as $journal) {
if (strlen($journal->description) > self::MAX_LENGTH) {
$journal->description = substr($journal->description, 0, self::MAX_LENGTH);
if (strlen((string) $journal->description) > self::MAX_LENGTH) {
$journal->description = substr((string) $journal->description, 0, self::MAX_LENGTH);
$journal->save();
$this->friendlyWarning(sprintf('Truncated description of transaction journal #%d', $journal->id));
++$count;
@@ -61,7 +61,7 @@ class CorrectsLongDescriptions extends Command
/** @var TransactionGroup $group */
foreach ($groups as $group) {
if (strlen((string) $group->title) > self::MAX_LENGTH) {
$group->title = substr($group->title, 0, self::MAX_LENGTH);
$group->title = substr((string) $group->title, 0, self::MAX_LENGTH);
$group->save();
$this->friendlyWarning(sprintf('Truncated description of transaction group #%d', $group->id));
++$count;

View File

@@ -128,9 +128,7 @@ class CorrectsNativeAmounts extends Command
$repository->setUserGroup($userGroup);
$set = $repository->getPiggyBanks();
$set = $set->filter(
static function (PiggyBank $piggyBank) use ($currency) {
return $currency->id !== $piggyBank->transaction_currency_id;
}
static fn (PiggyBank $piggyBank) => $currency->id !== $piggyBank->transaction_currency_id
);
foreach ($set as $piggyBank) {
$piggyBank->encrypted = false;

View File

@@ -100,7 +100,7 @@ class CorrectsRecurringTransactions extends Command
$destination = $transaction->destinationAccount;
$type = $recurrence->transactionType;
$link = config(sprintf('firefly.account_to_transaction.%s.%s', $source->accountType->type, $destination->accountType->type));
if (null !== $link && strtolower($type->type) !== strtolower($link)) {
if (null !== $link && strtolower((string) $type->type) !== strtolower($link)) {
$this->friendlyWarning(
sprintf('Recurring transaction #%d should be a "%s" but is a "%s" and will be corrected.', $recurrence->id, $link, $type->type)
);

View File

@@ -115,9 +115,7 @@ class CorrectsTransactionTypes extends Command
private function getSourceAccount(TransactionJournal $journal): Account
{
$collection = $journal->transactions->filter(
static function (Transaction $transaction) {
return $transaction->amount < 0;
}
static fn (Transaction $transaction) => $transaction->amount < 0
);
if (0 === $collection->count()) {
throw new FireflyException(sprintf('300001: Journal #%d has no source transaction.', $journal->id));
@@ -144,9 +142,7 @@ class CorrectsTransactionTypes extends Command
private function getDestinationAccount(TransactionJournal $journal): Account
{
$collection = $journal->transactions->filter(
static function (Transaction $transaction) {
return $transaction->amount > 0;
}
static fn (Transaction $transaction) => $transaction->amount > 0
);
if (0 === $collection->count()) {
throw new FireflyException(sprintf('300004: Journal #%d has no destination transaction.', $journal->id));

View File

@@ -184,7 +184,7 @@ class CorrectsUnevenAmount extends Command
return;
}
$amount = bcmul('-1', $source->amount);
$amount = bcmul('-1', (string) $source->amount);
// fix amount of destination:
/** @var null|Transaction $destination */
@@ -249,9 +249,9 @@ class CorrectsUnevenAmount extends Command
// Log::debug(sprintf('[c] %s', var_export($source->transaction_currency_id === $destination->foreign_currency_id,true)));
// Log::debug(sprintf('[d] %s', var_export((int) $destination->transaction_currency_id ===(int) $source->foreign_currency_id, true)));
if (0 === bccomp(app('steam')->positive($source->amount), app('steam')->positive($destination->foreign_amount))
if (0 === bccomp((string) app('steam')->positive($source->amount), (string) app('steam')->positive($destination->foreign_amount))
&& $source->transaction_currency_id === $destination->foreign_currency_id
&& 0 === bccomp(app('steam')->positive($destination->amount), app('steam')->positive($source->foreign_amount))
&& 0 === bccomp((string) app('steam')->positive($destination->amount), (string) app('steam')->positive($source->foreign_amount))
&& (int) $destination->transaction_currency_id === (int) $source->foreign_currency_id
) {
return true;

View File

@@ -273,7 +273,7 @@ class ExportsData extends Command
*/
private function exportData(array $options, array $data): void
{
$date = date('Y_m_d');
$date = \Safe\date('Y_m_d');
foreach ($data as $key => $content) {
$file = sprintf('%s%s_%s.csv', $options['directory'], $date, $key);
if (false === $options['force'] && file_exists($file)) {
@@ -283,7 +283,7 @@ class ExportsData extends Command
$this->friendlyWarning(sprintf('File "%s" exists already but will be replaced.', $file));
}
// continue to write to file.
file_put_contents($file, $content);
\Safe\file_put_contents($file, $content);
$this->friendlyPositive(sprintf('Wrote %s-export to file "%s".', $key, $file));
}
}

View File

@@ -130,7 +130,7 @@ class ForcesDecimalSize extends Command
// if sqlite, add function?
if ('sqlite' === (string) config('database.default')) {
DB::connection()->getPdo()->sqliteCreateFunction('REGEXP', static function ($pattern, $value) {
mb_regex_encoding('UTF-8');
\Safe\mb_regex_encoding('UTF-8');
$pattern = trim($pattern, '"');
return (false !== mb_ereg($pattern, (string) $value)) ? 1 : 0;
@@ -234,7 +234,7 @@ class ForcesDecimalSize extends Command
/** @var Builder $query */
$query = Account::leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id')
->where('account_meta.name', 'currency_id')
->where('account_meta.data', json_encode((string) $currency->id))
->where('account_meta.data', \Safe\json_encode((string) $currency->id))
;
$query->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression): void {
foreach ($fields as $field) {
@@ -338,7 +338,7 @@ class ForcesDecimalSize extends Command
->leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id')
->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id')
->where('account_meta.name', 'currency_id')
->where('account_meta.data', json_encode((string) $currency->id))
->where('account_meta.data', \Safe\json_encode((string) $currency->id))
->where(static function (Builder $q) use ($fields, $currency, $cast, $operator, $regularExpression): void {
foreach ($fields as $field) {
$q->orWhere(
@@ -394,7 +394,7 @@ class ForcesDecimalSize extends Command
->leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id')
->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id')
->where('account_meta.name', 'currency_id')
->where('account_meta.data', json_encode((string) $currency->id))
->where('account_meta.data', \Safe\json_encode((string) $currency->id))
->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression): void {
foreach ($fields as $field) {
$q->orWhere(
@@ -448,7 +448,7 @@ class ForcesDecimalSize extends Command
$query = PiggyBank::leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id')
->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id')
->where('account_meta.name', 'currency_id')
->where('account_meta.data', json_encode((string) $currency->id))
->where('account_meta.data', \Safe\json_encode((string) $currency->id))
->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression): void {
foreach ($fields as $field) {
$q->orWhere(

View File

@@ -111,8 +111,8 @@ class OutputsInstructions extends Command
*/
private function showLogo(): void
{
$today = date('m-d');
$month = date('m');
$today = \Safe\date('m-d');
$month = \Safe\date('m');
// variation in colors and effects just because I can!
// default is Ukraine flag:
$colors = ['blue', 'blue', 'blue', 'yellow', 'yellow', 'yellow', 'default', 'default'];
@@ -147,10 +147,7 @@ class OutputsInstructions extends Command
*/
private function showLine(): void
{
$line = '+';
$line .= str_repeat('-', 78);
$line .= '+';
$this->line($line);
$this->line(sprintf('+%s+', str_repeat('-', 78)));
}
/**

View File

@@ -0,0 +1,67 @@
<?php
declare(strict_types=1);
/*
* RecalculatesRunningBalance.php
* Copyright (c) 2025 james@firefly-iii.org.
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
namespace FireflyIII\Console\Commands\System;
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Support\Models\AccountBalanceCalculator;
use Illuminate\Console\Command;
class RecalculatesRunningBalance extends Command
{
use ShowsFriendlyMessages;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'firefly-iii:refresh-running-balance {--F|force : Force the execution of this command.}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Refreshes all running balances. May take a long time to run if forced.';
/**
* Execute the console command.
*/
public function handle()
{
if (true === config('firefly.feature_flags.running_balance_column')) {
$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.');
return 0;
}
$this->friendlyWarning('This command has been disabled.');
}
private function correctBalanceAmounts(bool $forced): void
{
AccountBalanceCalculator::recalculateAll($forced);
}
}

View File

@@ -63,15 +63,15 @@ class ScansAttachments extends Command
app('log')->error(sprintf('Could not decrypt data of attachment #%d: %s', $attachment->id, $e->getMessage()));
$decryptedContent = $encryptedContent;
}
$tempFileName = tempnam(sys_get_temp_dir(), 'FireflyIII');
$tempFileName = \Safe\tempnam(sys_get_temp_dir(), 'FireflyIII');
if (false === $tempFileName) {
app('log')->error(sprintf('Could not create temporary file for attachment #%d', $attachment->id));
exit(1);
}
file_put_contents($tempFileName, $decryptedContent);
$attachment->md5 = (string) md5_file($tempFileName);
$attachment->mime = (string) mime_content_type($tempFileName);
\Safe\file_put_contents($tempFileName, $decryptedContent);
$attachment->md5 = (string) \Safe\md5_file($tempFileName);
$attachment->mime = (string) \Safe\mime_content_type($tempFileName);
$attachment->save();
$this->friendlyInfo(sprintf('Fixed attachment #%d', $attachment->id));
}

View File

@@ -57,7 +57,7 @@ class VerifySecurityAlerts extends Command
return 0;
}
$content = $disk->get('alerts.json');
$json = json_decode($content, true, 10);
$json = \Safe\json_decode($content, true, 10);
/** @var array $array */
foreach ($json as $array) {

View File

@@ -167,7 +167,7 @@ class RemovesDatabaseDecryption extends Command
{
// try to json_decrypt the value.
try {
$newValue = json_decode($value, true, 512, JSON_THROW_ON_ERROR) ?? $value;
$newValue = \Safe\json_decode($value, true, 512, JSON_THROW_ON_ERROR) ?? $value;
} catch (\JsonException $e) {
$message = sprintf('Could not JSON decode preference row #%d: %s. This does not have to be a problem.', $id, $e->getMessage());
$this->friendlyError($message);

View File

@@ -24,7 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Console\Commands\Upgrade;
set_time_limit(0);
\Safe\set_time_limit(0);
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use Illuminate\Console\Command;

View File

@@ -100,7 +100,7 @@ class UpgradesRecurrenceMetaData extends Command
if ('tags' === $meta->name) {
$array = explode(',', $meta->value);
$value = json_encode($array, JSON_THROW_ON_ERROR);
$value = \Safe\json_encode($array, JSON_THROW_ON_ERROR);
}
RecurrenceTransactionMeta::create(

View File

@@ -78,8 +78,8 @@ class UpgradesRuleActions extends Command
/** @var RuleAction $action */
foreach ($actions as $action) {
if (str_starts_with($action->action_value, '=')) {
$action->action_value = sprintf('%s%s', '\=', substr($action->action_value, 1));
if (str_starts_with((string) $action->action_value, '=')) {
$action->action_value = sprintf('%s%s', '\=', substr((string) $action->action_value, 1));
$action->save();
++$count;
}

View File

@@ -179,9 +179,7 @@ class UpgradesToGroups extends Command
private function getDestinationTransactions(TransactionJournal $journal): Collection
{
return $journal->transactions->filter(
static function (Transaction $transaction) {
return $transaction->amount > 0;
}
static fn (Transaction $transaction) => $transaction->amount > 0
);
}
@@ -236,7 +234,7 @@ class UpgradesToGroups extends Command
$categoryId = $this->getTransactionCategory($transaction, $opposingTr) ?? $categoryId;
return [
'type' => strtolower($journal->transactionType->type),
'type' => strtolower((string) $journal->transactionType->type),
'date' => $journal->date,
'user' => $journal->user,
'user_group' => $journal->user->userGroup,
@@ -368,8 +366,8 @@ class UpgradesToGroups extends Command
{
$groupId = DB::table('transaction_groups')->insertGetId(
[
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
'created_at' => \Safe\date('Y-m-d H:i:s'),
'updated_at' => \Safe\date('Y-m-d H:i:s'),
'title' => null,
'user_id' => $array['user_id'],
]

View File

@@ -38,20 +38,20 @@ class UpgradesTransferCurrencies extends Command
{
use ShowsFriendlyMessages;
public const string CONFIG_NAME = '480_transfer_currencies';
protected $description = 'Updates transfer currency information.';
protected $signature = 'upgrade:480-transfer-currencies {--F|force : Force the execution of this command.}';
public const string CONFIG_NAME = '480_transfer_currencies';
protected $description = 'Updates transfer currency information.';
protected $signature = 'upgrade:480-transfer-currencies {--F|force : Force the execution of this command.}';
private array $accountCurrencies;
private AccountRepositoryInterface $accountRepos;
private JournalCLIRepositoryInterface $cliRepos;
private int $count;
private ?Account $destinationAccount;
private ?TransactionCurrency $destinationCurrency;
private ?Transaction $destinationTransaction;
private ?Account $sourceAccount;
private ?TransactionCurrency $sourceCurrency;
private ?Transaction $sourceTransaction;
private ?Account $destinationAccount = null;
private ?TransactionCurrency $destinationCurrency = null;
private ?Transaction $destinationTransaction = null;
private ?Account $sourceAccount = null;
private ?TransactionCurrency $sourceCurrency = null;
private ?Transaction $sourceTransaction = null;
/**
* Execute the console command.

View File

@@ -35,6 +35,7 @@ class Kernel extends ConsoleKernel
/**
* Register the commands for the application.
*/
#[\Override]
protected function commands(): void
{
$this->load(__DIR__.'/Commands');
@@ -45,6 +46,7 @@ class Kernel extends ConsoleKernel
/**
* Define the application's command schedule.
*/
#[\Override]
protected function schedule(Schedule $schedule): void
{
$schedule->call(

View File

@@ -36,15 +36,10 @@ class InvitationCreated extends Event
{
use SerializesModels;
public InvitedUser $invitee;
public TransactionGroup $transactionGroup;
/**
* Create a new event instance.
*/
public function __construct(InvitedUser $invitee)
{
$this->invitee = $invitee;
}
public function __construct(public InvitedUser $invitee) {}
}

View File

@@ -34,14 +34,11 @@ class DestroyedTransactionGroup extends Event
{
use SerializesModels;
public TransactionGroup $transactionGroup;
/**
* Create a new event instance.
*/
public function __construct(TransactionGroup $transactionGroup)
public function __construct(public TransactionGroup $transactionGroup)
{
app('log')->debug(sprintf('Now in %s', __METHOD__));
$this->transactionGroup = $transactionGroup;
}
}

View File

@@ -32,15 +32,10 @@ use Illuminate\Queue\SerializesModels;
*/
class DestroyedTransactionLink extends Event
{
use SerializesModels;
private TransactionJournalLink $link; // @phpstan-ignore-line
use SerializesModels; // @phpstan-ignore-line
/**
* DestroyedTransactionLink constructor.
*/
public function __construct(TransactionJournalLink $link)
{
$this->link = $link;
}
public function __construct(private TransactionJournalLink $link) {}
}

View File

@@ -34,13 +34,8 @@ class DetectedNewIPAddress extends Event
{
use SerializesModels;
public User $user;
/**
* Create a new event instance. This event is triggered when a new user registers.
*/
public function __construct(User $user)
{
$this->user = $user;
}
public function __construct(public User $user) {}
}

View File

@@ -31,10 +31,5 @@ class Updated
{
use SerializesModels;
public Account $account;
public function __construct(Account $account)
{
$this->account = $account;
}
public function __construct(public Account $account) {}
}

View File

@@ -35,10 +35,5 @@ class Created extends Event
{
use SerializesModels;
public BudgetLimit $budgetLimit;
public function __construct(BudgetLimit $budgetLimit)
{
$this->budgetLimit = $budgetLimit;
}
public function __construct(public BudgetLimit $budgetLimit) {}
}

View File

@@ -35,10 +35,5 @@ class Deleted extends Event
{
use SerializesModels;
public BudgetLimit $budgetLimit;
public function __construct(BudgetLimit $budgetLimit)
{
$this->budgetLimit = $budgetLimit;
}
public function __construct(public BudgetLimit $budgetLimit) {}
}

View File

@@ -35,10 +35,5 @@ class Updated extends Event
{
use SerializesModels;
public BudgetLimit $budgetLimit;
public function __construct(BudgetLimit $budgetLimit)
{
$this->budgetLimit = $budgetLimit;
}
public function __construct(public BudgetLimit $budgetLimit) {}
}

View File

@@ -39,18 +39,14 @@ class ChangedAmount extends Event
public string $amount;
public PiggyBank $piggyBank;
public ?TransactionGroup $transactionGroup;
public ?TransactionJournal $transactionJournal;
/**
* Create a new event instance.
*/
public function __construct(PiggyBank $piggyBank, string $amount, ?TransactionJournal $transactionJournal, ?TransactionGroup $transactionGroup)
public function __construct(PiggyBank $piggyBank, string $amount, public ?TransactionJournal $transactionJournal, public ?TransactionGroup $transactionGroup)
{
app('log')->debug(sprintf('Created piggy bank event for piggy bank #%d with amount %s', $piggyBank->id, $amount));
$this->piggyBank = $piggyBank;
$this->transactionJournal = $transactionJournal;
$this->transactionGroup = $transactionGroup;
$this->amount = $amount;
$this->piggyBank = $piggyBank;
$this->amount = $amount;
}
}

View File

@@ -34,15 +34,8 @@ class RuleActionFailedOnArray
{
use SerializesModels;
public string $error;
public array $journal;
public RuleAction $ruleAction;
public function __construct(RuleAction $ruleAction, array $journal, string $error)
public function __construct(public RuleAction $ruleAction, public array $journal, public string $error)
{
app('log')->debug('Created new RuleActionFailedOnArray');
$this->ruleAction = $ruleAction;
$this->journal = $journal;
$this->error = $error;
}
}

View File

@@ -35,15 +35,8 @@ class RuleActionFailedOnObject
{
use SerializesModels;
public string $error;
public TransactionJournal $journal;
public RuleAction $ruleAction;
public function __construct(RuleAction $ruleAction, TransactionJournal $journal, string $error)
public function __construct(public RuleAction $ruleAction, public TransactionJournal $journal, public string $error)
{
app('log')->debug('Created new RuleActionFailedOnObject');
$this->ruleAction = $ruleAction;
$this->journal = $journal;
$this->error = $error;
}
}

View File

@@ -34,14 +34,11 @@ class NewVersionAvailable extends Event
{
use SerializesModels;
public string $message;
/**
* Create a new event instance. This event is triggered when a new version is available.
*/
public function __construct(string $message)
public function __construct(public string $message)
{
Log::debug(__METHOD__);
$this->message = $message;
}
}

View File

@@ -33,11 +33,8 @@ class UserGroupChangedDefaultCurrency extends Event
{
use SerializesModels;
public UserGroup $userGroup;
public function __construct(UserGroup $userGroup)
public function __construct(public UserGroup $userGroup)
{
Log::debug('User group changed default currency.');
$this->userGroup = $userGroup;
}
}

View File

@@ -35,15 +35,8 @@ class RegisteredUser extends Event
{
use SerializesModels;
public OwnerNotifiable $owner;
public User $user;
/**
* Create a new event instance. This event is triggered when a new user registers.
*/
public function __construct(OwnerNotifiable $owner, User $user)
{
$this->user = $user;
$this->owner = $owner;
}
public function __construct(public OwnerNotifiable $owner, public User $user) {}
}

View File

@@ -39,17 +39,12 @@ class RequestedReportOnJournals
use InteractsWithSockets;
use SerializesModels;
public Collection $groups;
public int $userId;
/**
* Create a new event instance.
*/
public function __construct(int $userId, Collection $groups)
public function __construct(public int $userId, public Collection $groups)
{
app('log')->debug('In event RequestedReportOnJournals.');
$this->userId = $userId;
$this->groups = $groups;
}
/**

View File

@@ -34,14 +34,9 @@ class RequestedVersionCheckStatus extends Event
{
use SerializesModels;
public User $user;
/**
* Create a new event instance. This event is triggered when Firefly III wants to know
* what the deal is with the version checker.
*/
public function __construct(User $user)
{
$this->user = $user;
}
public function __construct(public User $user) {}
}

View File

@@ -32,15 +32,12 @@ use Illuminate\Queue\SerializesModels;
class MFABackupFewLeft extends Event
{
use SerializesModels;
public int $count;
public User $user;
public function __construct(null|Authenticatable|User $user, int $count)
public function __construct(null|Authenticatable|User $user, public int $count)
{
if ($user instanceof User) {
$this->user = $user;
}
$this->count = $count;
}
}

View File

@@ -32,15 +32,12 @@ use Illuminate\Queue\SerializesModels;
class MFAManyFailedAttempts extends Event
{
use SerializesModels;
public int $count;
public User $user;
public function __construct(null|Authenticatable|User $user, int $count)
public function __construct(null|Authenticatable|User $user, public int $count)
{
if ($user instanceof User) {
$this->user = $user;
}
$this->count = $count;
}
}

View File

@@ -30,10 +30,5 @@ class UnknownUserAttemptedLogin
{
use SerializesModels;
public string $address;
public function __construct(string $address)
{
$this->address = $address;
}
public function __construct(public string $address) {}
}

View File

@@ -34,13 +34,8 @@ class StoredAccount extends Event
{
use SerializesModels;
public Account $account;
/**
* Create a new event instance.
*/
public function __construct(Account $account)
{
$this->account = $account;
}
public function __construct(public Account $account) {}
}

View File

@@ -34,17 +34,8 @@ class StoredTransactionGroup extends Event
{
use SerializesModels;
public bool $applyRules;
public bool $fireWebhooks;
public TransactionGroup $transactionGroup;
/**
* Create a new event instance.
*/
public function __construct(TransactionGroup $transactionGroup, bool $applyRules, bool $fireWebhooks)
{
$this->transactionGroup = $transactionGroup;
$this->fireWebhooks = $fireWebhooks;
$this->applyRules = $applyRules;
}
public function __construct(public TransactionGroup $transactionGroup, public bool $applyRules, public bool $fireWebhooks) {}
}

View File

@@ -32,15 +32,13 @@ class OwnerTestNotificationChannel
use SerializesModels;
public string $channel;
public OwnerNotifiable $owner;
/**
* Create a new event instance.
*/
public function __construct(string $channel, OwnerNotifiable $owner)
public function __construct(string $channel, public OwnerNotifiable $owner)
{
app('log')->debug(sprintf('Triggered OwnerTestNotificationChannel("%s")', $channel));
$this->owner = $owner;
$this->channel = $channel;
}
}

View File

@@ -32,15 +32,13 @@ class UserTestNotificationChannel
use SerializesModels;
public string $channel;
public User $user;
/**
* Create a new event instance.
*/
public function __construct(string $channel, User $user)
public function __construct(string $channel, public User $user)
{
app('log')->debug(sprintf('Triggered UserTestNotificationChannel("%s")', $channel));
$this->user = $user;
$this->channel = $channel;
}
}

View File

@@ -34,23 +34,10 @@ class TriggeredAuditLog extends Event
{
use SerializesModels;
public mixed $after;
public Model $auditable;
public mixed $before;
public Model $changer;
public string $field;
/**
* Create a new event instance.
*
* @SuppressWarnings("PHPMD.ExcessiveParameterList")
*/
public function __construct(Model $changer, Model $auditable, string $field, mixed $before, mixed $after)
{
$this->changer = $changer;
$this->auditable = $auditable;
$this->field = $field;
$this->before = $before;
$this->after = $after;
}
public function __construct(public Model $changer, public Model $auditable, public string $field, public mixed $before, public mixed $after) {}
}

View File

@@ -34,13 +34,8 @@ class UpdatedAccount extends Event
{
use SerializesModels;
public Account $account;
/**
* Create a new event instance.
*/
public function __construct(Account $account)
{
$this->account = $account;
}
public function __construct(public Account $account) {}
}

View File

@@ -34,17 +34,8 @@ class UpdatedTransactionGroup extends Event
{
use SerializesModels;
public bool $applyRules;
public bool $fireWebhooks;
public TransactionGroup $transactionGroup;
/**
* Create a new event instance.
*/
public function __construct(TransactionGroup $transactionGroup, bool $applyRules, bool $fireWebhooks)
{
$this->transactionGroup = $transactionGroup;
$this->fireWebhooks = $fireWebhooks;
$this->applyRules = $applyRules;
}
public function __construct(public TransactionGroup $transactionGroup, public bool $applyRules, public bool $fireWebhooks) {}
}

View File

@@ -34,17 +34,8 @@ class UserChangedEmail extends Event
{
use SerializesModels;
public string $newEmail;
public string $oldEmail;
public User $user;
/**
* UserChangedEmail constructor.
*/
public function __construct(User $user, string $newEmail, string $oldEmail)
{
$this->user = $user;
$this->oldEmail = $oldEmail;
$this->newEmail = $newEmail;
}
public function __construct(public User $user, public string $newEmail, public string $oldEmail) {}
}

View File

@@ -34,14 +34,5 @@ class WarnUserAboutBill extends Event
{
use SerializesModels;
public Bill $bill;
public int $diff;
public string $field;
public function __construct(Bill $bill, string $field, int $diff)
{
$this->bill = $bill;
$this->field = $field;
$this->diff = $diff;
}
public function __construct(public Bill $bill, public string $field, public int $diff) {}
}

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