mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-08-17 11:16:39 +00:00
Compare commits
2479 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
67d29b8416 | ||
|
f62e93b487 | ||
|
a7cc70b975 | ||
|
60f0d8074a | ||
|
ed1fdf9382 | ||
|
9ea3c4224e | ||
|
71325de44e | ||
|
cdb041e647 | ||
|
b9d750bf59 | ||
|
461249737e | ||
|
1aeaa8b77d | ||
|
a59d7ccdc2 | ||
|
2c1ca428db | ||
|
224970f3bd | ||
|
742d934ddb | ||
|
1699513023 | ||
|
488a8a7e86 | ||
|
dd571d6221 | ||
|
4cc5128b4c | ||
|
2636a6557a | ||
|
0bf97ccf22 | ||
|
592fc71b4e | ||
|
0e7712d3b8 | ||
|
80f21d2a4f | ||
|
5513ec068e | ||
|
14a46a6197 | ||
|
b93ee5efd8 | ||
|
cdd4dc6065 | ||
|
0d8b2ae799 | ||
|
77dc79b638 | ||
|
f48723db40 | ||
|
ebf91078c5 | ||
|
90d0d85dd6 | ||
|
0c5b4f7f64 | ||
|
9c4bb08ed1 | ||
|
1d3bbde4b0 | ||
|
b6faee033d | ||
|
05e0f88d11 | ||
|
ae9a151140 | ||
|
da633e3c62 | ||
|
8cb384d3cf | ||
|
de2a34c3ec | ||
|
b7c65446a8 | ||
|
bc648b187c | ||
|
4de0828b5d | ||
|
b2364d26ec | ||
|
83d94cb792 | ||
|
66cc3f48bc | ||
|
63297c43b7 | ||
|
5b0637558f | ||
|
e9a8e104be | ||
|
0f524e7800 | ||
|
969e0bccc9 | ||
|
ba3e026927 | ||
|
0c6868d477 | ||
|
7f70cf47ec | ||
|
fa4492287d | ||
|
60809c688e | ||
|
2404f5299c | ||
|
21a394eaf5 | ||
|
419d7846c9 | ||
|
0827accc39 | ||
|
2e53f7d0b7 | ||
|
bdfcf8ec95 | ||
|
6a20170e00 | ||
|
0c974f1ff7 | ||
|
9c098d45c5 | ||
|
cfdf9aa8dc | ||
|
2ea74542e6 | ||
|
7fcaa2b5fb | ||
|
e9e905e495 | ||
|
f67ff98d78 | ||
|
e3c4dde4ff | ||
|
9787561000 | ||
|
cd041b4c75 | ||
|
60ee70c926 | ||
|
00de78b6f1 | ||
|
33a841b831 | ||
|
df66dcf102 | ||
|
086a7a0b1e | ||
|
ec0ba3d212 | ||
|
b0ab06b7eb | ||
|
965acd6d45 | ||
|
4d156870ef | ||
|
499720df46 | ||
|
610bc108e7 | ||
|
53f1b0218c | ||
|
0a7a099796 | ||
|
ed90ebc896 | ||
|
87fe518d45 | ||
|
5cb0891a27 | ||
|
b4bd66bd58 | ||
|
64d95fe845 | ||
|
a2d6d7a92c | ||
|
1d8a784586 | ||
|
3c8bfae8ff | ||
|
f65eccfe4c | ||
|
7ce6dc9f16 | ||
|
4a73caf4c3 | ||
|
1b9d8dd3c3 | ||
|
b11bfb0aae | ||
|
024e16bf4b | ||
|
daf753d76e | ||
|
4c90f66578 | ||
|
db94f18d46 | ||
|
a9bd0f551d | ||
|
e1ba2d9ad9 | ||
|
939c636a74 | ||
|
2b829cb645 | ||
|
4bbc898639 | ||
|
27d07d5807 | ||
|
f010ffefc1 | ||
|
fc0fee161e | ||
|
72c99d3834 | ||
|
a2984f299b | ||
|
3925077223 | ||
|
deb51bd8de | ||
|
03f39f53d8 | ||
|
e72314778c | ||
|
ced3e9387a | ||
|
02c906afe6 | ||
|
7a2d4c9bd2 | ||
|
dffddfda18 | ||
|
9bb62c865a | ||
|
a97ebf2b97 | ||
|
9a62a6c514 | ||
|
04dc162270 | ||
|
75d5a50328 | ||
|
eadb7d5dcb | ||
|
8dc07f1148 | ||
|
217ce85a9b | ||
|
ef88b25dbd | ||
|
4c2e2a3a5a | ||
|
1e8e1c6e51 | ||
|
a92944786c | ||
|
8ce760a0bf | ||
|
8d8e047d2c | ||
|
06a923db94 | ||
|
551408b801 | ||
|
e1915e365a | ||
|
e8c4eec536 | ||
|
e3f4e75561 | ||
|
fd640f9698 | ||
|
ffd8aef35f | ||
|
46412bdc66 | ||
|
d73c3476c8 | ||
|
ff737ae05e | ||
|
171ec0c630 | ||
|
b4a6c6fcbe | ||
|
4886084296 | ||
|
1a3dfbdef6 | ||
|
0c087f33c2 | ||
|
5f9f621fa6 | ||
|
cd3de7b545 | ||
|
8aeb513d54 | ||
|
bfc5c5d154 | ||
|
7c9f7f04b7 | ||
|
3352c2cf3c | ||
|
e61a433999 | ||
|
3517452ea1 | ||
|
8a1190b9ee | ||
|
fc78c9a1d6 | ||
|
8d55f7f2e5 | ||
|
8162b22d43 | ||
|
8504d55f17 | ||
|
75ae1bbde1 | ||
|
a20668e91b | ||
|
eb559bbb03 | ||
|
2eae96a895 | ||
|
4bbf35bca4 | ||
|
f1b5e45488 | ||
|
57ed1581ec | ||
|
c668381ab0 | ||
|
44f99991fc | ||
|
696c76102b | ||
|
fe4e00dc5c | ||
|
1a1b0ee27d | ||
|
298c4ec654 | ||
|
c6e3fa2cc6 | ||
|
61484dcfee | ||
|
99009cff88 | ||
|
673f68b07c | ||
|
d1232192ce | ||
|
b2084a94e5 | ||
|
ddcb246955 | ||
|
8796168580 | ||
|
dde7bcfc4c | ||
|
a6503fda39 | ||
|
455e311661 | ||
|
a4a919d7b7 | ||
|
a90ce3c944 | ||
|
a6d179b883 | ||
|
1b29e5e628 | ||
|
e8fd496bca | ||
|
3d61e27a47 | ||
|
f9a55ce3d8 | ||
|
c432757942 | ||
|
da740ccbef | ||
|
f1173263b6 | ||
|
68da1a7039 | ||
|
64414edf58 | ||
|
6b136d2c8c | ||
|
752a877b91 | ||
|
d11c36e476 | ||
|
b13232f06b | ||
|
cf6ed5af32 | ||
|
be531d777e | ||
|
190508fa54 | ||
|
2c2dddc071 | ||
|
c60858de5c | ||
|
6ab332e4fb | ||
|
9df43cc710 | ||
|
79d1b15d86 | ||
|
923debb299 | ||
|
f5fef8c036 | ||
|
982134c077 | ||
|
07aeb6cd20 | ||
|
30cca355ba | ||
|
d17cc15037 | ||
|
efade857bb | ||
|
15ac6a1195 | ||
|
a45a050e7d | ||
|
e435ff8b1c | ||
|
788dae1477 | ||
|
2bb4cc7954 | ||
|
ecead8a27b | ||
|
4a2681df14 | ||
|
5761d82635 | ||
|
36fce9db4e | ||
|
1227574bc1 | ||
|
47c2a66e1d | ||
|
c59e52bbbf | ||
|
81961fd632 | ||
|
b557805eeb | ||
|
e58da3c41d | ||
|
f43b539470 | ||
|
ab3dbf9218 | ||
|
d943a5ae9b | ||
|
449058dad7 | ||
|
b9cf8b3ef2 | ||
|
27037c2fbb | ||
|
10646099a0 | ||
|
43ad63fac6 | ||
|
221c59437c | ||
|
1a94ec5bbe | ||
|
f57c554c56 | ||
|
334aec58a4 | ||
|
7035da4d75 | ||
|
29a40ce8dd | ||
|
c6c98c4df5 | ||
|
277d7e6650 | ||
|
130c539006 | ||
|
2bdb2e12f0 | ||
|
25779206a1 | ||
|
92f72a5ad7 | ||
|
4e041248ac | ||
|
8cc5aa8aba | ||
|
4ba712b24e | ||
|
7af9169763 | ||
|
775504acb6 | ||
|
7840e37e1a | ||
|
720fff4595 | ||
|
551c1f4cda | ||
|
7f0db0de04 | ||
|
6ac3cc384b | ||
|
563879c218 | ||
|
dbb7ed3d5d | ||
|
4e3c2ba72c | ||
|
8e911491f6 | ||
|
03c5f3cc2d | ||
|
484565d600 | ||
|
163a979227 | ||
|
ed105fee1d | ||
|
3b82cfa486 | ||
|
834e52eb2e | ||
|
7eb938fe23 | ||
|
8db7a4c47d | ||
|
b055a5d6af | ||
|
ad0a1b9a24 | ||
|
05d190659a | ||
|
9c6eaffba6 | ||
|
3ee5e9aa04 | ||
|
93a544fe53 | ||
|
3bc98bee20 | ||
|
f6302bc29b | ||
|
43aa1704a9 | ||
|
14fe82e361 | ||
|
33317c15a2 | ||
|
ff1b56c5ef | ||
|
25e2063d70 | ||
|
1d36c74934 | ||
|
aebe7908f0 | ||
|
3e2b881296 | ||
|
c670a6991d | ||
|
f76a7d59e0 | ||
|
3d8bf3ec9b | ||
|
55e4479454 | ||
|
436fe9fea4 | ||
|
63a7a4b03b | ||
|
0cab974048 | ||
|
5fdcf37d06 | ||
|
4663fb2f12 | ||
|
e844ab592d | ||
|
3dcb35710b | ||
|
8d87abde64 | ||
|
2b78485a61 | ||
|
9d057b853f | ||
|
bd269eaadf | ||
|
7096c65f50 | ||
|
1462b0de69 | ||
|
86a1f170c4 | ||
|
40389fb6d5 | ||
|
36021d84cf | ||
|
1278f92355 | ||
|
573f9adb49 | ||
|
431c99c27b | ||
|
77cc558931 | ||
|
42043de34f | ||
|
f2b2c2109f | ||
|
7fe29ad983 | ||
|
07d9bcfb9d | ||
|
fdd235e4cb | ||
|
2646acadb8 | ||
|
5ef646b810 | ||
|
e8bdb5ef38 | ||
|
7a851c2cc6 | ||
|
624784e54e | ||
|
20eb2ebe58 | ||
|
25f8acb417 | ||
|
f75e6430b1 | ||
|
e72a483c49 | ||
|
68934858ce | ||
|
c08b5177d9 | ||
|
fe8635f1ce | ||
|
e96d28b981 | ||
|
784cc3d52d | ||
|
2ab3fb3a71 | ||
|
ff765d4687 | ||
|
f6e778e1d4 | ||
|
ed36604050 | ||
|
cbf8c6e80d | ||
|
f11db0de61 | ||
|
34f16dcdd5 | ||
|
f18aae39b8 | ||
|
924171e7b9 | ||
|
6b580212bf | ||
|
208ae1cae7 | ||
|
3aa7fe47de | ||
|
5318082467 | ||
|
941ec095e5 | ||
|
d5ebd8e57c | ||
|
ebe087984d | ||
|
fa993e02dd | ||
|
44df77f45a | ||
|
0f8f95de9a | ||
|
f32283d2f1 | ||
|
14f8695599 | ||
|
f8b48f7455 | ||
|
70e2aab073 | ||
|
12db745f17 | ||
|
8a48cc690f | ||
|
eb313c65a5 | ||
|
07d6cbc194 | ||
|
8975a462c4 | ||
|
2e4f07d058 | ||
|
74a2935fea | ||
|
3d02468828 | ||
|
0438fb5a2e | ||
|
a4f9a6fd42 | ||
|
a0be4c9daa | ||
|
2dc003bd85 | ||
|
78aa8bd838 | ||
|
f55fde2b52 | ||
|
232572549e | ||
|
d07705c329 | ||
|
688ca8e374 | ||
|
160c364d2a | ||
|
2b3e6bfbb9 | ||
|
5a55d1db24 | ||
|
bd252dbc16 | ||
|
30124855e3 | ||
|
463ebd296f | ||
|
2e7a17560d | ||
|
374d5a074d | ||
|
88b294d873 | ||
|
0aa6d5b322 | ||
|
1357074dcd | ||
|
4a03847c14 | ||
|
346289fdb2 | ||
|
673c7d98f6 | ||
|
9473fb849a | ||
|
f60e244739 | ||
|
a571106f0f | ||
|
244d9be46e | ||
|
dcf71c6fdf | ||
|
1e1497ff4e | ||
|
b72aa92e55 | ||
|
527f18c1e3 | ||
|
788003dcdc | ||
|
c764ddd3be | ||
|
057ac0691c | ||
|
4334e9bed7 | ||
|
a9bb87b0c6 | ||
|
43f668dc65 | ||
|
6ed5892cf9 | ||
|
023a3fdade | ||
|
1b52147a05 | ||
|
7f7644c92f | ||
|
70b756baaf | ||
|
0f008b9b1e | ||
|
4d956858de | ||
|
959370a204 | ||
|
336829cd24 | ||
|
5975ab5170 | ||
|
eba0e942e8 | ||
|
f45c20db1e | ||
|
79afe09d8d | ||
|
334d010a24 | ||
|
91947daa5b | ||
|
aad2ca4488 | ||
|
7c68a96f7b | ||
|
2e1e8b5d39 | ||
|
178df1ed4a | ||
|
28749e2513 | ||
|
6cbe57ef40 | ||
|
13d3b86309 | ||
|
cf8f43cdf2 | ||
|
cc83268b2c | ||
|
8f23b47a78 | ||
|
529611170c | ||
|
c1114e889e | ||
|
d20e03a7b6 | ||
|
6303233bdf | ||
|
baa8c00144 | ||
|
e6daaa5b6d | ||
|
f711fcfd52 | ||
|
74992e95f2 | ||
|
20c8c1043f | ||
|
f00898afba | ||
|
95b431535e | ||
|
cafd8a9674 | ||
|
e1e7f914f9 | ||
|
19c2f7d2bf | ||
|
7daacd9b66 | ||
|
af715de566 | ||
|
93e3c89f20 | ||
|
b0456c5252 | ||
|
f7fa03ddd8 | ||
|
4c78e23a9c | ||
|
79c2065471 | ||
|
c19b89ac93 | ||
|
62a1837d61 | ||
|
56b34aa624 | ||
|
e8392155f9 | ||
|
6d532470e6 | ||
|
15f683ef7e | ||
|
18ba2e563e | ||
|
63984f1c37 | ||
|
3c082dcf0e | ||
|
090eb55226 | ||
|
4706cd44de | ||
|
cf7c01e5d0 | ||
|
0b5e0a268a | ||
|
9eea4497e5 | ||
|
63fdc2487f | ||
|
cf59da7e0c | ||
|
e0621affb6 | ||
|
6d0906c37b | ||
|
a3ede0c6f6 | ||
|
72eab3c0eb | ||
|
c530961546 | ||
|
dd7aba0b51 | ||
|
7c54e17a30 | ||
|
342d72b0a6 | ||
|
22ee504e52 | ||
|
4880ee850e | ||
|
b45ce27817 | ||
|
dfad93d9ec | ||
|
52712c8cb2 | ||
|
740874e654 | ||
|
0f1f37a5df | ||
|
d609cbfb16 | ||
|
2375857c92 | ||
|
10275eb832 | ||
|
108867b2ef | ||
|
e5a77a86f9 | ||
|
309d3e8e95 | ||
|
1ef9b83180 | ||
|
85757e1a20 | ||
|
e2a18e0e7c | ||
|
056af8fd8a | ||
|
c72a63f218 | ||
|
fb823ed422 | ||
|
3fae6c0cac | ||
|
55b1e22d37 | ||
|
e6b95c7894 | ||
|
ea2f9e4919 | ||
|
08bd405e29 | ||
|
8294b2d526 | ||
|
b521fb8fae | ||
|
3e9789d5e6 | ||
|
13b029d7f0 | ||
|
59427ba5c2 | ||
|
46bba9d799 | ||
|
0ef1d1834f | ||
|
e39b2f5355 | ||
|
03dae53714 | ||
|
6be6187532 | ||
|
4c26f613ee | ||
|
765de2eeba | ||
|
49b1fef7ff | ||
|
36157afc6a | ||
|
c5c3638dbc | ||
|
926665a8f5 | ||
|
e35743ff42 | ||
|
321743dbf6 | ||
|
c2e1e25489 | ||
|
222387adba | ||
|
335414f25a | ||
|
ea903c105d | ||
|
aab29852b4 | ||
|
aa17ea0b68 | ||
|
deeb5bf118 | ||
|
47d5e8d169 | ||
|
033d61abbb | ||
|
28efc15820 | ||
|
1c7988fad2 | ||
|
c8077762ba | ||
|
ea53b34cbb | ||
|
270ac87e65 | ||
|
0a60f63bf8 | ||
|
38ed70243e | ||
|
0f2a9a9b37 | ||
|
ec525849fc | ||
|
dee1e1a79d | ||
|
98b5ed9e5b | ||
|
d8eb084240 | ||
|
c2f5fbe7d3 | ||
|
60f6542a1b | ||
|
93c2edf76c | ||
|
f74f4c5719 | ||
|
8c67c347e1 | ||
|
fcbc341f03 | ||
|
2dbce10483 | ||
|
8504b3e3a9 | ||
|
d4ab5dcefd | ||
|
5d11e285bc | ||
|
259e1350d5 | ||
|
dd54ec6122 | ||
|
c2b3791336 | ||
|
fc1f15cc14 | ||
|
5d74979f50 | ||
|
5dea7e5b41 | ||
|
a53a8a8529 | ||
|
aac7a2691d | ||
|
10e7be1729 | ||
|
9b1319f970 | ||
|
a38f909919 | ||
|
d8c0192f54 | ||
|
1e8d294b8d | ||
|
d3be64114b | ||
|
1bddd4da8e | ||
|
6b5ff2680b | ||
|
efe17f638a | ||
|
3c1f4b7377 | ||
|
acfc214eb1 | ||
|
fe1c605c11 | ||
|
891cd94031 | ||
|
c620d57f42 | ||
|
b076c92eb0 | ||
|
9e35216e98 | ||
|
3fa4734ba7 | ||
|
0144d09325 | ||
|
f28274aded | ||
|
d5f5df82b6 | ||
|
49c27aff2d | ||
|
7b1b0cfef9 | ||
|
f728bdeb5a | ||
|
4712a826d1 | ||
|
d7335d71ea | ||
|
e6a84ab387 | ||
|
fd5269490d | ||
|
05e307136c | ||
|
2c41215e84 | ||
|
d9dc394e7f | ||
|
a63daf6166 | ||
|
f878af0d3b | ||
|
def0578421 | ||
|
a2e07b1518 | ||
|
dc26ce308d | ||
|
0189b91d3b | ||
|
fb6706648e | ||
|
3c20fd7533 | ||
|
82f89ef614 | ||
|
4d10ae91b7 | ||
|
aebb677c21 | ||
|
abf9c65b21 | ||
|
524dcc7d97 | ||
|
0a4f6fd6b8 | ||
|
9c4beab0a7 | ||
|
b91e019416 | ||
|
ad97e33ec0 | ||
|
b1479b5dae | ||
|
f1445b0132 | ||
|
456dbfd29d | ||
|
0eea776b8b | ||
|
853a97307b | ||
|
3b28b5d07a | ||
|
a7bfa503d9 | ||
|
a7c3d32370 | ||
|
c64ddbec1f | ||
|
6535f86001 | ||
|
531abc9f3d | ||
|
f7a02bdc2a | ||
|
af38f31147 | ||
|
4b4b5ef319 | ||
|
88fd76f0f1 | ||
|
3d1d064720 | ||
|
9ca8161588 | ||
|
5eb2b2fc5e | ||
|
d991df89c8 | ||
|
49339ea9b0 | ||
|
561359b14f | ||
|
79a4eec96e | ||
|
dd11f98be7 | ||
|
40e2bf7cac | ||
|
73e3a11be9 | ||
|
a180c37c58 | ||
|
aff802713e | ||
|
ebc7fad1fa | ||
|
5068fc76c1 | ||
|
70b6e39cd7 | ||
|
31fc915b51 | ||
|
dfed56ed1b | ||
|
7f6d2877fb | ||
|
d9315dcbfe | ||
|
6fbf4ec6f1 | ||
|
2e32acc3c9 | ||
|
328216534b | ||
|
dea6e2c83f | ||
|
31f4f08e54 | ||
|
c4f2519b6f | ||
|
0359a98681 | ||
|
c69b24c1d2 | ||
|
d50c560ed2 | ||
|
21ffd70523 | ||
|
664e9fe8da | ||
|
c948490eb6 | ||
|
5b3bcc7611 | ||
|
c7d9ca9a61 | ||
|
259bad4487 | ||
|
73d3a82519 | ||
|
6f4ca53907 | ||
|
5111aaa123 | ||
|
c903b82b7b | ||
|
ed00d97ff9 | ||
|
9939ed0aaf | ||
|
8ea32714f6 | ||
|
f9fb77690b | ||
|
98b28c75b7 | ||
|
405be07ba8 | ||
|
5a84e222fd | ||
|
36b0cf04ba | ||
|
70c11d6634 | ||
|
eebfb0cb40 | ||
|
2500cc55e2 | ||
|
c3b99c322d | ||
|
976128a435 | ||
|
3be55adaeb | ||
|
141a828947 | ||
|
0386d5e09f | ||
|
17d308cfde | ||
|
c540e3ff71 | ||
|
8641cbd619 | ||
|
70f76cd538 | ||
|
420a765295 | ||
|
c926d85c8b | ||
|
7668a854f7 | ||
|
c30e1c1973 | ||
|
bd556f1934 | ||
|
9530e928d5 | ||
|
ae367aa736 | ||
|
3ccff2969b | ||
|
530abb1da6 | ||
|
9fe70fb8d8 | ||
|
b0215a23fb | ||
|
48735b1a5b | ||
|
3c0b802667 | ||
|
9bfad07f8c | ||
|
5c91da80e1 | ||
|
e465c93ffc | ||
|
8e56fa4ef8 | ||
|
f56de6e719 | ||
|
86ba1d151a | ||
|
8d24db14e9 | ||
|
cead122d96 | ||
|
b7dd335fb7 | ||
|
20a7092fe3 | ||
|
1d3da33e1d | ||
|
e36675e232 | ||
|
aa8588758a | ||
|
47a58738d4 | ||
|
e0a31d29a4 | ||
|
45369868ad | ||
|
639c51d651 | ||
|
3d424972cc | ||
|
96fd4da6d8 | ||
|
a97a0d461d | ||
|
8d3170785e | ||
|
ae373a15c5 | ||
|
1f342ed592 | ||
|
3e04f14665 | ||
|
dbf83df363 | ||
|
15bfc0d6fa | ||
|
f3fc1d8382 | ||
|
07cb7dd06e | ||
|
38624442d1 | ||
|
258dfb3d11 | ||
|
51ddfcdaaa | ||
|
2a0acdbb27 | ||
|
99bd28f21e | ||
|
643ae91bb5 | ||
|
591e3ab3ec | ||
|
edd7aed691 | ||
|
2e89586559 | ||
|
173f593a7e | ||
|
d4839c8818 | ||
|
a122dba0ad | ||
|
ae813a536e | ||
|
b9d174238b | ||
|
fbf5adbe79 | ||
|
c676a65f93 | ||
|
5ab8fbddcb | ||
|
b942fa4b09 | ||
|
8ee358551c | ||
|
a5f3b4533b | ||
|
e258efe1bf | ||
|
f9a213e06f | ||
|
05bd732e7c | ||
|
70050678c5 | ||
|
6a649f2f42 | ||
|
6912e05677 | ||
|
c78fa8eaea | ||
|
5a06e3523b | ||
|
b34cb0428b | ||
|
ce3c866168 | ||
|
4ada2f3e3c | ||
|
ad739c1d84 | ||
|
60af2c4232 | ||
|
cc69f50106 | ||
|
0f57094b17 | ||
|
dad738ae42 | ||
|
3df05eb63c | ||
|
57b83dd239 | ||
|
1539dcffd5 | ||
|
b4a09efb8b | ||
|
e82b372f75 | ||
|
83a89181bc | ||
|
b1e08b1084 | ||
|
0eb582ab3b | ||
|
07b58b4200 | ||
|
8807f04599 | ||
|
4657d34ae4 | ||
|
79951453cd | ||
|
5291f485ac | ||
|
ed75d84376 | ||
|
a7011376cb | ||
|
6c4bd84b66 | ||
|
c4418857e6 | ||
|
5d316ea26a | ||
|
4a0887c978 | ||
|
dbfceafb02 | ||
|
4db73285b7 | ||
|
876ea8bb07 | ||
|
e0e90845e7 | ||
|
f1223a5a3f | ||
|
1a3720bfaa | ||
|
1ddcc51c48 | ||
|
9f43ea3118 | ||
|
0fe4ac9ef5 | ||
|
d6d395eccd | ||
|
a26f5e2e6d | ||
|
849e006eda | ||
|
f70a4511c6 | ||
|
21ba311ecf | ||
|
fb0a100a7f | ||
|
2295110cf1 | ||
|
3c82c9af8b | ||
|
df78aa2f0d | ||
|
1ac18909b4 | ||
|
07d793e9f7 | ||
|
2a7b540a95 | ||
|
5cdecf7d04 | ||
|
1a0e6ffffb | ||
|
c0cfc60da6 | ||
|
9f831a8b3d | ||
|
ec3ee2f995 | ||
|
25ca02f541 | ||
|
776c59faea | ||
|
a4b1587a78 | ||
|
1d79eea69e | ||
|
b369b6e7b8 | ||
|
3832297d69 | ||
|
a7e64a130e | ||
|
73715dc0b9 | ||
|
8f66c93ad0 | ||
|
bcaf6402b5 | ||
|
16b0ee0c79 | ||
|
1033655615 | ||
|
6d327b98d4 | ||
|
585cfddfd7 | ||
|
a18cd23154 | ||
|
e421b29b01 | ||
|
e6dc881f56 | ||
|
01308e2076 | ||
|
26ab65c5aa | ||
|
68f398f97c | ||
|
eb04b11c30 | ||
|
29ff1648e2 | ||
|
13a1e45fc5 | ||
|
2ac3e130ec | ||
|
0436614643 | ||
|
427e11dac9 | ||
|
c3a4656e22 | ||
|
aab8eb467c | ||
|
84987dbe02 | ||
|
b7c2576970 | ||
|
57f32ec987 | ||
|
af73069409 | ||
|
1b06211152 | ||
|
8ee428eb17 | ||
|
07f3386ec7 | ||
|
94ae0bd7c3 | ||
|
8bd13b19a6 | ||
|
1118954db6 | ||
|
a798a9d50d | ||
|
9e11b504e1 | ||
|
2e65055c9a | ||
|
733607a8a9 | ||
|
30d40d1d57 | ||
|
a3eec9d5ec | ||
|
d9599b3448 | ||
|
3ca0fc15b1 | ||
|
e3a71b64f8 | ||
|
d403f4f9d3 | ||
|
e0577bddc5 | ||
|
38b88dce44 | ||
|
e1f99139f3 | ||
|
2e5d5f5a36 | ||
|
6b05c0fbd3 | ||
|
0667ccfc98 | ||
|
0d9c4ec25d | ||
|
e4fa385ac5 | ||
|
f8f2a10014 | ||
|
6502559341 | ||
|
3f50cd74da | ||
|
b32500c3e3 | ||
|
1f338f0062 | ||
|
76925585c3 | ||
|
55de722229 | ||
|
5b35e6ec4b | ||
|
80431bae4f | ||
|
68222e20f7 | ||
|
85c2e9cf1e | ||
|
c64227d90b | ||
|
83f9149606 | ||
|
2ad2d53f88 | ||
|
1fd455dbab | ||
|
9b86b20eff | ||
|
13712f7c5e | ||
|
789935cf1c | ||
|
03a4633a98 | ||
|
a252522e27 | ||
|
927d607b1a | ||
|
ef6af34af9 | ||
|
61f04fe4c1 | ||
|
ac1e026981 | ||
|
7225474621 | ||
|
86d6a2f581 | ||
|
f82a884783 | ||
|
df4f28e819 | ||
|
9ee66625de | ||
|
fb595bb335 | ||
|
a8e4fbb7b6 | ||
|
0060c46cdb | ||
|
b909841eae | ||
|
f001675066 | ||
|
c979cfcd89 | ||
|
2a30b10b97 | ||
|
fb903d5e3a | ||
|
268f690d75 | ||
|
2e074009c4 | ||
|
d5e60b206d | ||
|
1964afe876 | ||
|
328a476fb5 | ||
|
12ca0811e6 | ||
|
7a20f7ce34 | ||
|
cce856c0e2 | ||
|
5ef2a33334 | ||
|
6e29a7421f | ||
|
89e6bd7471 | ||
|
df0a6db83f | ||
|
c949ff19b7 | ||
|
e4b4234fbb | ||
|
86aaa3068a | ||
|
08f9da8a15 | ||
|
6bd0aa14b3 | ||
|
38bff09c1d | ||
|
93caa433d7 | ||
|
bcb1fce7ed | ||
|
c777c95ced | ||
|
5e89bde05b | ||
|
79e98cf8a2 | ||
|
bf8ab7f5d7 | ||
|
54a471ba4c | ||
|
26accbc81e | ||
|
242c6c1b0c | ||
|
db659efe27 | ||
|
06be3f0d46 | ||
|
da318fb592 | ||
|
d58c230f00 | ||
|
fd7ba9dd57 | ||
|
47a98451a0 | ||
|
91e961a876 | ||
|
9aaf79a3ab | ||
|
b1e3cf3a20 | ||
|
be0d785a56 | ||
|
efb89023ac | ||
|
9adccb345a | ||
|
83f5b8ab12 | ||
|
de38e7cf9f | ||
|
3a0b3f46a5 | ||
|
806d108d1c | ||
|
794d130ff9 | ||
|
848e7d4c9f | ||
|
6e96c75be7 | ||
|
e20dc78620 | ||
|
35912fe9fb | ||
|
74777a648c | ||
|
0eb0f7f35f | ||
|
1226ef542f | ||
|
7d169518a5 | ||
|
abfd837f68 | ||
|
8ab1e97fb0 | ||
|
9fbb290d0f | ||
|
28deb32f5e | ||
|
2c1023ad40 | ||
|
766418a894 | ||
|
970193473d | ||
|
a782abd6db | ||
|
b98050e238 | ||
|
1c02b04a0d | ||
|
c5f94372a0 | ||
|
928613e908 | ||
|
fd3da949da | ||
|
15210f75e7 | ||
|
dec5e3440d | ||
|
413a4f3d9c | ||
|
1cbb644d65 | ||
|
e008c1f742 | ||
|
9bffa86706 | ||
|
a5a95055c5 | ||
|
5a5c92b5b5 | ||
|
41941b37f9 | ||
|
881fe3e6e7 | ||
|
a7570d9ab5 | ||
|
605afdb271 | ||
|
b6e54fe3cf | ||
|
fbe5a5dd39 | ||
|
e284da368d | ||
|
a5328a9ff4 | ||
|
a925e1aa02 | ||
|
81c37b3349 | ||
|
c84c64a1c2 | ||
|
ced9ea4777 | ||
|
36c0e8df2d | ||
|
61a0a7795e | ||
|
e2b4448985 | ||
|
f5d1a597cf | ||
|
80607bc6ae | ||
|
8c5c6c2bde | ||
|
f476a909df | ||
|
9bf86be305 | ||
|
3d96f5df58 | ||
|
fc0adfd375 | ||
|
1d62d5d44a | ||
|
6c2486faa7 | ||
|
f9daf7751a | ||
|
c269913510 | ||
|
cc436605d0 | ||
|
c697d2aa13 | ||
|
90219bec35 | ||
|
afca023767 | ||
|
1502c5de94 | ||
|
cd408e581b | ||
|
122c8acae0 | ||
|
13cffaa1e3 | ||
|
feab244edd | ||
|
259ad852c9 | ||
|
6802f53c96 | ||
|
d922390802 | ||
|
2a9f51a40f | ||
|
614d54c9bd | ||
|
3ea8792c6e | ||
|
3d802b9c9e | ||
|
480d787242 | ||
|
820c6feadd | ||
|
8c1eeedf17 | ||
|
9b5931f1d6 | ||
|
d5cade320b | ||
|
ef46ab6de2 | ||
|
d0d3921ff6 | ||
|
2cb2e2e635 | ||
|
1a0047205d | ||
|
468655cd94 | ||
|
09cb4b10b9 | ||
|
6eaf83d6d2 | ||
|
7c8a2e3591 | ||
|
ba5c3ef0a1 | ||
|
c0f744b03a | ||
|
8cd13ba13b | ||
|
10db3d63ac | ||
|
a753fde2f1 | ||
|
d4f1b9a1bc | ||
|
3cfaa5aa03 | ||
|
bc47017e31 | ||
|
125d9e7e9d | ||
|
4cea7a3287 | ||
|
e7a1ad23f4 | ||
|
afd3fd9f88 | ||
|
f2251d7bfa | ||
|
700ccaa853 | ||
|
0fcdcf0f01 | ||
|
fa347a5ee4 | ||
|
d412c2407a | ||
|
dea86242fd | ||
|
973c175213 | ||
|
e135d01655 | ||
|
9b37d5ab8d | ||
|
84c3868c9b | ||
|
3c0b23aaed | ||
|
7e6ce7c3e8 | ||
|
7111aec101 | ||
|
1f9e0b48c9 | ||
|
63a7aad44c | ||
|
9191ae5054 | ||
|
618e70748c | ||
|
68e4f26656 | ||
|
5124a5eba9 | ||
|
708cd014c5 | ||
|
9654f631c5 | ||
|
65027d7832 | ||
|
db0500dcf0 | ||
|
89d4a34acf | ||
|
23bbebb80e | ||
|
4ccdd8f322 | ||
|
3033b0fa7f | ||
|
abc7bfb54c | ||
|
1fede6b802 | ||
|
6e3381844e | ||
|
3f2560c8e5 | ||
|
abdbb86d05 | ||
|
9008d19494 | ||
|
929513c220 | ||
|
566a303650 | ||
|
e783b8dba4 | ||
|
bb6cbe884e | ||
|
3be4c07848 | ||
|
732a87f051 | ||
|
124d3aaf96 | ||
|
65df355440 | ||
|
29e07c6604 | ||
|
c0af63e59e | ||
|
772f0f5ba4 | ||
|
6db3e3d75e | ||
|
9290c2247e | ||
|
5967762cd8 | ||
|
5845ba0daf | ||
|
961d067aec | ||
|
81ce2c1b3e | ||
|
d6bf304390 | ||
|
fe9620a438 | ||
|
d90321aa1e | ||
|
c26667ebc7 | ||
|
862140a9fc | ||
|
8447670ed5 | ||
|
7a2c52531a | ||
|
cb4e5a80b2 | ||
|
c976149bf1 | ||
|
4917f40abf | ||
|
4c27bbf069 | ||
|
a90214273b | ||
|
5167f53fd5 | ||
|
40083230fd | ||
|
ca57942b38 | ||
|
ef58d5b1b2 | ||
|
cc218e203f | ||
|
9fdaf1cee8 | ||
|
770d092e93 | ||
|
6d4e45b89f | ||
|
1fee2092d6 | ||
|
7bd824e8cb | ||
|
fa588db1a9 | ||
|
c3e0ce0c08 | ||
|
6a629a7da3 | ||
|
07e4e93632 | ||
|
6784fe4436 | ||
|
af8c127106 | ||
|
ebd32e0e08 | ||
|
b56acf36c5 | ||
|
4daaa44ba8 | ||
|
93ae82691b | ||
|
c3e739cd6f | ||
|
851da6a0a1 | ||
|
a99f68fd17 | ||
|
1266eff7f6 | ||
|
e5d5e774dc | ||
|
0429f50e5c | ||
|
e9e0225731 | ||
|
e4db5f5a21 | ||
|
3c1f44f554 | ||
|
67434bb8a5 | ||
|
b0b65c3f04 | ||
|
fe724fa1b8 | ||
|
c3ce9e896e | ||
|
c60120ac20 | ||
|
8bbe519350 | ||
|
c426ff352c | ||
|
15605dd163 | ||
|
4d0ff86bfa | ||
|
7722ca2bf0 | ||
|
5878b2c427 | ||
|
f2499e0a77 | ||
|
81f781a823 | ||
|
b5734beb32 | ||
|
24696bf800 | ||
|
27a576ae8a | ||
|
2b9996b844 | ||
|
742c84269b | ||
|
333c348117 | ||
|
ed4d2ee6ad | ||
|
445804a7f1 | ||
|
ee0116f112 | ||
|
03e176bd16 | ||
|
a84050a084 | ||
|
bef7887a8d | ||
|
5b8e01fbfb | ||
|
56b9b66352 | ||
|
6cfdc58cb1 | ||
|
dbf3e76ecc | ||
|
0022009dd5 | ||
|
6249488f0f | ||
|
29bd3a2804 | ||
|
ba35c5da0b | ||
|
9b242f1a75 | ||
|
1acc2ab18b | ||
|
e031fffe65 | ||
|
2a61633ab9 | ||
|
5e3f9f9bce | ||
|
8c320fd199 | ||
|
85a2a87806 | ||
|
3666ef8c59 | ||
|
e4db21f0c0 | ||
|
d137b2938d | ||
|
d3a619cb15 | ||
|
d40fd485ca | ||
|
32e89155a0 | ||
|
cae0b1798a | ||
|
5e654786be | ||
|
75ce777090 | ||
|
f350948fb2 | ||
|
1f4ca9c8fe | ||
|
dd0c36d464 | ||
|
e468d5b892 | ||
|
e58cf0d3c9 | ||
|
e389fd7d7c | ||
|
83b5ca69dd | ||
|
5e17cb5823 | ||
|
bb11e61034 | ||
|
eff631276e | ||
|
89ab62fff2 | ||
|
bdf7d3978f | ||
|
3fbaed2fdc | ||
|
a4f3be5397 | ||
|
265d973811 | ||
|
e22ed9a69b | ||
|
80762616f3 | ||
|
fcecd5c85e | ||
|
2780cf4b20 | ||
|
7e63700ca2 | ||
|
2d9a3f5fc6 | ||
|
f5bbd445d2 | ||
|
12008fb0e9 | ||
|
5f6c84ab4c | ||
|
8b9936044b | ||
|
db478711ed | ||
|
63184ac298 | ||
|
5f6772260d | ||
|
22a237d316 | ||
|
c47980a737 | ||
|
e43372b2ce | ||
|
395b6ecb76 | ||
|
328a1e256e | ||
|
4a31f9ce7e | ||
|
345f4903a9 | ||
|
3fe5e5ea8c | ||
|
b0da22ddf2 | ||
|
388ee14dfc | ||
|
2c53c72024 | ||
|
de260adca4 | ||
|
33f764088e | ||
|
23a8835758 | ||
|
034647a5ca | ||
|
d8813120a7 | ||
|
989fd1adba | ||
|
a5f4793e81 | ||
|
9529721368 | ||
|
86243131cd | ||
|
344cbe4fb7 | ||
|
44af5473a8 | ||
|
f33f9c797b | ||
|
352eedb136 | ||
|
c8d6ef3782 | ||
|
922a5fa9c7 | ||
|
c125984d55 | ||
|
a60c3165f1 | ||
|
363c849c50 | ||
|
36c9782c8f | ||
|
49847a91e3 | ||
|
516653d007 | ||
|
2743359a4e | ||
|
8055e9e927 | ||
|
702f2c3146 | ||
|
ad36082fca | ||
|
81e650986d | ||
|
f3c89e8055 | ||
|
3a8c0074b7 | ||
|
dcfcbfd9b5 | ||
|
04c71a2e9e | ||
|
2383d16e7a | ||
|
5bb7705702 | ||
|
2e3267ab9e | ||
|
d969cd72c0 | ||
|
e4894c756a | ||
|
f52044e794 | ||
|
43960a5b60 | ||
|
81b0b048db | ||
|
3278d9850e | ||
|
b13bcec61a | ||
|
21d18acabc | ||
|
4060d14de0 | ||
|
c67a71e238 | ||
|
ed330e30d0 | ||
|
7673d11673 | ||
|
e1114f720d | ||
|
b49e7d6b21 | ||
|
c9ba5f08c4 | ||
|
5aa8793e33 | ||
|
dd98549bce | ||
|
d6d53cc598 | ||
|
6516495e2b | ||
|
7fcdf85dee | ||
|
704c6055b3 | ||
|
f650dd9463 | ||
|
1b261359e6 | ||
|
8050c8cb84 | ||
|
7666960a86 | ||
|
0a7210729f | ||
|
90c9fdaf55 | ||
|
60d8bb2aab | ||
|
d55833cb86 | ||
|
39fbf3ce20 | ||
|
acd9685578 | ||
|
15994c8c56 | ||
|
b942f351f8 | ||
|
f16b679049 | ||
|
8d8f81c27d | ||
|
74610a5d55 | ||
|
409b4fe4d9 | ||
|
817a9f57c4 | ||
|
e05c174e6d | ||
|
05d461fb88 | ||
|
7bb2f96ae2 | ||
|
8f15bd716d | ||
|
a702662e88 | ||
|
0c6e00666b | ||
|
5ba079e71c | ||
|
ebcf9b3be1 | ||
|
e7e3370baa | ||
|
21d4b396cc | ||
|
249b0c3377 | ||
|
b36f6741ff | ||
|
0059ed7bde | ||
|
d7bbc8334e | ||
|
bd245d5c92 | ||
|
4e618a4d0b | ||
|
b57785a234 | ||
|
2b7101e362 | ||
|
e74b629dc2 | ||
|
a4f329cfc3 | ||
|
e993abc8fb | ||
|
6961365a40 | ||
|
16303515f5 | ||
|
bb5bca9cf0 | ||
|
e8a61821e9 | ||
|
5d4cf5f55e | ||
|
5e9de60c1a | ||
|
417700ef13 | ||
|
b14062b197 | ||
|
33f370359c | ||
|
c032ffd4f9 | ||
|
1a7d60ccc8 | ||
|
f52675068b | ||
|
f53923f16c | ||
|
2eebcb21f1 | ||
|
64ff5eed27 | ||
|
1667b88dcd | ||
|
b27fe59ab4 | ||
|
bdcd9825ec | ||
|
8edfb1460c | ||
|
914dc8596b | ||
|
6b64a39182 | ||
|
d28326cc89 | ||
|
e3181e90df | ||
|
486f25cd96 | ||
|
612a395eb2 | ||
|
a3b4d5ff62 | ||
|
b613b56d1e | ||
|
6b7fc03f02 | ||
|
5999ee406c | ||
|
e348127770 | ||
|
b60a3be34b | ||
|
e3bdc62ac4 | ||
|
83b8fdba05 | ||
|
b21461c824 | ||
|
0b64507fd7 | ||
|
45dcd5df09 | ||
|
3bdea43744 | ||
|
b3895a04a0 | ||
|
d4738b21ab | ||
|
2f66315416 | ||
|
f4af19e121 | ||
|
abdb717b37 | ||
|
e229bd8121 | ||
|
d31fa743d0 | ||
|
4ad666d964 | ||
|
f7b66a048a | ||
|
a91f6fbfaf | ||
|
f3566c609a | ||
|
904320b9b8 | ||
|
35c1ce6504 | ||
|
a96c830e3e | ||
|
ddefdd5ec5 | ||
|
9e41cd9c8c | ||
|
b3740e643a | ||
|
55ac76f663 | ||
|
49560ca6a6 | ||
|
fd37054493 | ||
|
bf589e5c57 | ||
|
e97018cf2e | ||
|
5038ed7708 | ||
|
02081b09a2 | ||
|
a74d345ac2 | ||
|
e472c3520d | ||
|
39654249e4 | ||
|
69929bee31 | ||
|
b276b24a79 | ||
|
1b99dbab0a | ||
|
1ea0fa318c | ||
|
4066fc643f | ||
|
b7975c6a88 | ||
|
1e88b1eb88 | ||
|
88490de38f | ||
|
77759d5580 | ||
|
22971ded84 | ||
|
841edcfffb | ||
|
05fe503456 | ||
|
030b6cb281 | ||
|
896c15a7a1 | ||
|
b176308dbd | ||
|
da71d6172c | ||
|
f1457fcda6 | ||
|
a39553256e | ||
|
553a9be3d5 | ||
|
187e1914e3 | ||
|
fc83565d02 | ||
|
7e94f246e3 | ||
|
44637dfaab | ||
|
bab4c05e5f | ||
|
5b43a2e99f | ||
|
ee2b87d5fe | ||
|
c9f7e96450 | ||
|
ea361365f0 | ||
|
5dfb35064a | ||
|
5522e4f514 | ||
|
c1367d12a6 | ||
|
db2485f97a | ||
|
321c8fca67 | ||
|
73b98612a5 | ||
|
671e93c50f | ||
|
553c3ec17e | ||
|
94b933c7a4 | ||
|
38bdd6c36c | ||
|
536e054961 | ||
|
6dfe93bc19 | ||
|
d8a15e41e6 | ||
|
ca8a65af60 | ||
|
06cd75ba74 | ||
|
10d2a91d99 | ||
|
f2f3d69aa8 | ||
|
0338010eaa | ||
|
185842a891 | ||
|
ff91fe432c | ||
|
681b0b9046 | ||
|
5f11272d49 | ||
|
c4e46bf89b | ||
|
ee9b651f0f | ||
|
9bfa52f3ce | ||
|
5c471059f3 | ||
|
5714bd0749 | ||
|
749ce2ca9b | ||
|
93c83fbe7a | ||
|
4474a71e65 | ||
|
697ad5b2b5 | ||
|
1558e87923 | ||
|
3b18a29adc | ||
|
c6bc308ce7 | ||
|
36caf5d8ec | ||
|
c49f3fcccf | ||
|
d144392bd6 | ||
|
9b7285ea84 | ||
|
0671f20ab1 | ||
|
4bdc5fa3fc | ||
|
ddff192a1f | ||
|
ff55b36f32 | ||
|
8e4c772dcd | ||
|
fd7683c212 | ||
|
6eaed9829b | ||
|
3c33ea959e | ||
|
80a732b32b | ||
|
a9f2741282 | ||
|
600fa388c1 | ||
|
45d7042405 | ||
|
2945f5fcde | ||
|
be1dff49fa | ||
|
665b78ebf5 | ||
|
416fe0c147 | ||
|
4ca346fc4d | ||
|
6f9482fc1b | ||
|
af6e70c41c | ||
|
7116c65bd7 | ||
|
9e98c52c64 | ||
|
c5e0c492a7 | ||
|
f43c74df66 | ||
|
40dbae17b1 | ||
|
3ca88adade | ||
|
c8be9ceaf5 | ||
|
52df1aad14 | ||
|
6bc73f4f55 | ||
|
4ade02efc8 | ||
|
d2c52b47f1 | ||
|
c25b63d87b | ||
|
c120a908f3 | ||
|
07541fa08f | ||
|
0098a9c3c0 | ||
|
9f95d7a76f | ||
|
67126e46b9 | ||
|
c4c178b39d | ||
|
eef14ced59 | ||
|
d9245f06f7 | ||
|
625ad14d7d | ||
|
23e5cf1b34 | ||
|
ad9efde2d0 | ||
|
10f2cf2481 | ||
|
f0416f5322 | ||
|
11ba24482f | ||
|
e5bc074e68 | ||
|
93ea86f921 | ||
|
cf8957a460 | ||
|
9c2f771bae | ||
|
d9e8f8106a | ||
|
6589f88883 | ||
|
38ebdd8249 | ||
|
6296ead897 | ||
|
ecf5cc62f9 | ||
|
b205cc87fc | ||
|
4c60473f02 | ||
|
7104433a68 | ||
|
f47464944b | ||
|
edb9480c90 | ||
|
615e789134 | ||
|
3e96bb526c | ||
|
1d21a8788c | ||
|
e420ead9e8 | ||
|
06b7f18d55 | ||
|
8659c7efbd | ||
|
80fe52f5d7 | ||
|
77358301e8 | ||
|
93ed1de23f | ||
|
a81ca5114b | ||
|
9a69b941d8 | ||
|
194ecc7ac7 | ||
|
44da3be910 | ||
|
22de6e61ff | ||
|
37f91cabf5 | ||
|
7f9d87a117 | ||
|
52e83c2ec2 | ||
|
70c08d6b50 | ||
|
0b49e9b8a8 | ||
|
6add8765c4 | ||
|
73d97d90ae | ||
|
4d12e6b58b | ||
|
43650583fe | ||
|
3cc0e0f20f | ||
|
27d6e70469 | ||
|
ab4ee2fdb0 | ||
|
23a09825cb | ||
|
ce1e99be9a | ||
|
63440c4cb7 | ||
|
e5b30fa156 | ||
|
8c067019f7 | ||
|
bb3ceaeb0e | ||
|
7cf6066afd | ||
|
b6e8144fe9 | ||
|
7cabc5db57 | ||
|
059df6f8ac | ||
|
6ae43aee5c | ||
|
0ef99077d8 | ||
|
3ea48eb6ee | ||
|
322b6d19d8 | ||
|
8045d3c170 | ||
|
76885d2c50 | ||
|
a1f7a518e3 | ||
|
55205d6107 | ||
|
c7ce5632ea | ||
|
91cec7485a | ||
|
37fbc657a7 | ||
|
908dc15a3b | ||
|
d4bd7c0549 | ||
|
4c0d6a5259 | ||
|
48c8c5b353 | ||
|
d502c8d286 | ||
|
79c4fad922 | ||
|
ae0a675668 | ||
|
b1532ab982 | ||
|
08e65887ca | ||
|
4c0934bae8 | ||
|
1670fe5e4d | ||
|
bba362fb58 | ||
|
4aa361617f | ||
|
be01b177fa | ||
|
4d1b21f70d | ||
|
aa3fba91d4 | ||
|
cc6a7b181a | ||
|
c460ccfad5 | ||
|
69d875d981 | ||
|
75ea1c4f4b | ||
|
cfbda09e36 | ||
|
7746f2ca19 | ||
|
a8fb463520 | ||
|
3ef732b895 | ||
|
1101af87cb | ||
|
c9e0043cc1 | ||
|
edb8bb3ce3 | ||
|
ac0f75c808 | ||
|
b39e16c51c | ||
|
23d3abbf63 | ||
|
34e5433082 | ||
|
9fbc4c2ba1 | ||
|
38ed7c1543 | ||
|
39a928d7f4 | ||
|
121561da3e | ||
|
5893b30da8 | ||
|
858480929c | ||
|
242fb3b498 | ||
|
47469c7082 | ||
|
18f2633810 | ||
|
c50a4ae993 | ||
|
2db32ce44f | ||
|
38b505d036 | ||
|
b03a36b87f | ||
|
fa72912349 | ||
|
7e98fac3b7 | ||
|
f14c8a2ec2 | ||
|
443b76388e | ||
|
7c63f097c8 | ||
|
037cd75658 | ||
|
4e394d6017 | ||
|
76dadd1cab | ||
|
d8506c4361 | ||
|
d49809c939 | ||
|
ea808b441b | ||
|
a464ad015f | ||
|
e8ec13ca5f | ||
|
7f694ede98 | ||
|
203ae2812f | ||
|
20dfeae653 | ||
|
397c0abebe | ||
|
72ef7ac5e4 | ||
|
9f8e33a1ec | ||
|
0b378b51f8 | ||
|
20ab457222 | ||
|
b138812e1a | ||
|
dcfd4d6672 | ||
|
11b109d425 | ||
|
ba1f0d9a24 | ||
|
3cdae5a851 | ||
|
7c162fe87f | ||
|
eb8f595541 | ||
|
6b6107fb00 | ||
|
b4feb27118 | ||
|
2e8ea7493a | ||
|
d26a5a6e9c | ||
|
29dce924cf | ||
|
2bd068211b | ||
|
1406abe7ae | ||
|
c97792d1d1 | ||
|
ef23948b41 | ||
|
4e47641c76 | ||
|
0e8d2c5f0a | ||
|
9493046212 | ||
|
5c3b4d1663 | ||
|
5e8671d24b | ||
|
9118a153d5 | ||
|
b97988a597 | ||
|
56ff25285c | ||
|
2f20bac734 | ||
|
4b23ca1186 | ||
|
cb7e766321 | ||
|
a63f1c30d9 | ||
|
196c504b3d | ||
|
68755137e4 | ||
|
19bef9b725 | ||
|
34e006d87b | ||
|
d215510124 | ||
|
9d75ac221c | ||
|
e610c3d6ab | ||
|
96d70a84ab | ||
|
3f6abdb457 | ||
|
00d19241d9 | ||
|
7c44cae83c | ||
|
9652c86782 | ||
|
cea8c4c217 | ||
|
03637a080c | ||
|
e27cffcf31 | ||
|
f52144d8d9 | ||
|
b12d72bef6 | ||
|
4e6dc3bcef | ||
|
c1cd322f8f | ||
|
0995d78506 | ||
|
34c9823096 | ||
|
040ba2cf8b | ||
|
08896c5813 | ||
|
ebe67b14c1 | ||
|
75ed1fbbfc | ||
|
e39c0c8414 | ||
|
769fb7c218 | ||
|
359a5656e8 | ||
|
8e3b5f9cbc | ||
|
a9747d668a | ||
|
9c815c916f | ||
|
faa995fd01 | ||
|
be224367bb | ||
|
609ff7d2aa | ||
|
10544e5fbd | ||
|
812e767ba4 | ||
|
134f0cfcd1 | ||
|
e46adb6539 | ||
|
97c1233e89 | ||
|
3e0d8e024c | ||
|
1f7fbf57af | ||
|
ade653c393 | ||
|
016395fe8a | ||
|
e0c9d3627e | ||
|
07fe4400ed | ||
|
70ddbd743c | ||
|
5a02006a42 | ||
|
cc7db2b614 | ||
|
1b2106d43b | ||
|
86d15435a5 | ||
|
beed44f065 | ||
|
de3376c966 | ||
|
313676e3be | ||
|
86d4549874 | ||
|
c3bd46d7c0 | ||
|
46e97f95f9 | ||
|
f13dd18b6f | ||
|
c916fbbee9 | ||
|
d007db166a | ||
|
d3314e0130 | ||
|
75b033c563 | ||
|
f451efd90c | ||
|
81f2c59ae4 | ||
|
ef67355e3b | ||
|
4201bc16a1 | ||
|
14d58c9834 | ||
|
8ac9fe7e69 | ||
|
9c08b9f1d3 | ||
|
6b2619c5cc | ||
|
2ace09eb49 | ||
|
47167c06ae | ||
|
2d62fcac06 | ||
|
eeda74d79c | ||
|
4cf23a954f | ||
|
0bc1e6dbaa | ||
|
7da0c94e45 | ||
|
69b1985ac0 | ||
|
61eb8f325e | ||
|
0ab92114a5 | ||
|
66310b494b | ||
|
805d3ec975 | ||
|
f83ab0a7dc | ||
|
ced55b5065 | ||
|
986863f1d2 | ||
|
d1529a0cfc | ||
|
f3ceba5325 | ||
|
711b4c62b5 | ||
|
f441f68da6 | ||
|
2cf8bb2537 | ||
|
bf434e5d42 | ||
|
b1ea36ae5b | ||
|
5f3524c5aa | ||
|
2f75437ac1 | ||
|
6c945bfd60 | ||
|
82f993f0ff | ||
|
08f3f2aeb9 | ||
|
099fc49c4b | ||
|
6f2c46cb36 | ||
|
135424f8b8 | ||
|
9534fa59d6 | ||
|
51ae15a650 | ||
|
29776fa98c | ||
|
7ddffb9251 | ||
|
069770b39e | ||
|
626119d774 | ||
|
993d18d508 | ||
|
7b84c7c2dc | ||
|
76429c923e | ||
|
ca1b048758 | ||
|
fb11971b84 | ||
|
465542b0f5 | ||
|
5185a3ed5a | ||
|
4d1615197d | ||
|
83c6887ed0 | ||
|
9d1e20192d | ||
|
ad17837593 | ||
|
40ec63ddb9 | ||
|
bc3c019d03 | ||
|
35f8ecf9bf | ||
|
4c649a7099 | ||
|
1abf214141 | ||
|
8cb748745b | ||
|
f3df783ed3 | ||
|
50d6234089 | ||
|
baa1da3e8e | ||
|
35a8016744 | ||
|
89af363ba1 | ||
|
9020ed158c | ||
|
2e3071d40f | ||
|
df5aff279e | ||
|
249b2c63d8 | ||
|
6d8f5b88fe | ||
|
2579750ba3 | ||
|
5e7ee8c5bf | ||
|
610bc9f4bc | ||
|
3d1233314a | ||
|
a258b35236 | ||
|
51e23dae21 | ||
|
13f2e6537e | ||
|
cba3590dec | ||
|
613a02fa52 | ||
|
2b615cf757 | ||
|
52a593e2e0 | ||
|
cf89d93cec | ||
|
295724c4e9 | ||
|
20852acc78 | ||
|
39fbd545ad | ||
|
0babe84a33 | ||
|
3373961143 | ||
|
7f5b50d1f6 | ||
|
04267f1388 | ||
|
cddba20499 | ||
|
791833ab61 | ||
|
0ad9a75274 | ||
|
172d78f810 | ||
|
d2018ad3ec | ||
|
8c64c1d5e4 | ||
|
97124bcbce | ||
|
27dd30785f | ||
|
093794f7a5 | ||
|
a67bad11b2 | ||
|
91a53032b9 | ||
|
a87ce030d8 | ||
|
799da3597f | ||
|
663bf22a2a | ||
|
5d3abb315c | ||
|
a6ce34b67e | ||
|
75f5b5b51d | ||
|
555b358b80 | ||
|
7772190d45 | ||
|
311effb518 | ||
|
d2ccb33c54 | ||
|
5b312708f9 | ||
|
f4ae1e6c79 | ||
|
a91298d045 | ||
|
cfcf860438 | ||
|
71d53fbda4 | ||
|
4a3c2d5d97 | ||
|
089514908d | ||
|
9cfced1732 | ||
|
a2627b5158 | ||
|
342e9a263a | ||
|
1d90748e4d | ||
|
40efaa1017 | ||
|
641683d431 | ||
|
b10c1044bd | ||
|
0fea3a5a85 | ||
|
7b830a69d9 | ||
|
5c069caea1 | ||
|
e78f2213ed | ||
|
22af0b373e | ||
|
ca34e0ebd5 | ||
|
e139cf76de | ||
|
50f87a210a | ||
|
ac5c11a8d7 | ||
|
3813b7a9e8 | ||
|
86a6e51ebc | ||
|
eb4343407d | ||
|
8eb4c64602 | ||
|
f033a14bc7 | ||
|
59199134a6 | ||
|
c6d831fd94 | ||
|
a963e1bc03 | ||
|
be48d3bea2 | ||
|
7d438375c1 | ||
|
b20b8868bf | ||
|
b4638e1ae5 | ||
|
9872c18715 | ||
|
e854c1b8ae | ||
|
e243ec10ba | ||
|
b8f2f0a73f | ||
|
8c481e38f2 | ||
|
609e911fd6 | ||
|
d894ccc9cc | ||
|
19d4b6ba86 | ||
|
789dba7cf9 | ||
|
b6e88a56c5 | ||
|
b96a9a359c | ||
|
ba64a7d039 | ||
|
20c8fea520 | ||
|
e6854b9265 | ||
|
122cab1757 | ||
|
51b07f08ac | ||
|
e453ee19a1 | ||
|
4786c97c0b | ||
|
b5d4e82f45 | ||
|
c0072625c6 | ||
|
8c2455e8dd | ||
|
55c82b2a0f | ||
|
3120e29940 | ||
|
1211a5c878 | ||
|
8f98be32f9 | ||
|
65764199fe | ||
|
9ce39f5724 | ||
|
59922e6c2e | ||
|
cb62469a80 | ||
|
3df8c4ff75 | ||
|
cf4c1d8089 | ||
|
88539497bf | ||
|
123693096c | ||
|
60786461a9 | ||
|
452b6d0e1b | ||
|
d04efb8325 | ||
|
d1a09ff33b | ||
|
29bed2547c | ||
|
1209c4e76a | ||
|
9cdaf7076a | ||
|
2a1738cbe1 | ||
|
09bd0b572a | ||
|
9c19a08b17 | ||
|
37f05338f7 | ||
|
a72af79fab | ||
|
2dfd230918 | ||
|
409c24d45a | ||
|
35e187be77 | ||
|
df78ef1c78 | ||
|
d978838c84 | ||
|
3320e06f81 | ||
|
ab50a6518b | ||
|
e1155328b8 | ||
|
daa6ddc39f | ||
|
3b1ffc87bc | ||
|
94be254367 | ||
|
abb1095cef | ||
|
f2849c8058 | ||
|
e5a08d2cf1 | ||
|
46e01475fc | ||
|
89c1a2d912 | ||
|
2be7813a67 | ||
|
cbf14f541c | ||
|
8ee4c2ea11 | ||
|
980120f1bd | ||
|
679e72e5e2 | ||
|
ff7f4e5bba | ||
|
582c6676c6 | ||
|
8002610234 | ||
|
3ba81c6254 | ||
|
dc16a1a430 | ||
|
2f50fb38b0 | ||
|
aca008c911 | ||
|
ad0dcc2cf4 | ||
|
be1d5591c4 | ||
|
bb57015004 | ||
|
96f7047989 | ||
|
25e6114948 | ||
|
0ac4a42351 | ||
|
02687dfe53 | ||
|
ba10aa5ca5 | ||
|
c000e090fe | ||
|
9c0893c093 | ||
|
1e1aa28ab2 | ||
|
52a5995bd1 | ||
|
5ca0a9f75a | ||
|
45d99aa456 | ||
|
39eeea9c3c | ||
|
55a6cc5cd4 | ||
|
e3ecfdfac6 | ||
|
3ddbb282d7 | ||
|
346478622b | ||
|
fcb9e76c17 | ||
|
bbcd86eab5 | ||
|
24a6f5f36c | ||
|
6e18b8056d | ||
|
1e5137e5db | ||
|
78342537a0 | ||
|
b20e736f41 | ||
|
df65f08dec | ||
|
03b6f6fcb1 | ||
|
5c30981e76 | ||
|
0b2ca03848 | ||
|
70041e713e | ||
|
31625cad4b | ||
|
8663c877af | ||
|
f76ce602ce | ||
|
32d1554fbe | ||
|
7c28b47f91 | ||
|
ff249a4ee6 | ||
|
a5c75e6abe | ||
|
b8a8ddf23e | ||
|
43c52daf6b | ||
|
f0265b9fda | ||
|
07813fa858 | ||
|
ca7c86a057 | ||
|
c59ccb1077 | ||
|
2ab45ac5d4 | ||
|
ae6b177a08 | ||
|
50806ace32 | ||
|
efb0dc42ff | ||
|
2fbeef95f1 | ||
|
f02d524e82 | ||
|
6479fbabed | ||
|
059bf32563 | ||
|
2f55499f7d | ||
|
9c8bcd4f4c | ||
|
2715a181e3 | ||
|
b3c831d596 | ||
|
274885c8a6 | ||
|
d6e5f71d50 | ||
|
b9536dfe4e | ||
|
22a6e34279 | ||
|
b1a68b087c | ||
|
ef8f9672af | ||
|
b696b09f92 | ||
|
9892e70028 | ||
|
52f885df20 | ||
|
a58c6b0cec | ||
|
b59723f276 | ||
|
20ab27b237 | ||
|
046d7befca | ||
|
a8cbbde8fc | ||
|
efb7d4275d | ||
|
d4f275e566 | ||
|
45db911011 | ||
|
50fccec438 | ||
|
67e72e864c | ||
|
dff4946b48 | ||
|
a38700f3fa | ||
|
42c4441755 | ||
|
1a4b646acd | ||
|
5888dd38a2 | ||
|
f56d63c754 | ||
|
93db50383a | ||
|
4e9b5a71db | ||
|
c85be915e6 | ||
|
1df4cdda42 | ||
|
cad03b04ae | ||
|
cddfa3a8d2 | ||
|
3a49af94d0 | ||
|
e60320a9be | ||
|
0ffb3508c6 | ||
|
d618f6d355 | ||
|
e542a65bf3 | ||
|
d1e1314dcf | ||
|
9ebdb00579 | ||
|
95a7a0c90d | ||
|
cabd3d60f0 | ||
|
ab8ee8b72a | ||
|
01f06a7e5b | ||
|
aa7d4a610b | ||
|
3f61b6d707 | ||
|
9ae0cc5700 | ||
|
6f65a73dd9 | ||
|
fb676a9ad7 | ||
|
dd66a1adf0 | ||
|
8c9bb3addb | ||
|
472c1a0c37 | ||
|
6fe8bf6c41 | ||
|
342e6f2fef | ||
|
23a8e3ef41 | ||
|
7c11b99469 | ||
|
e715162ed6 | ||
|
368cc550cb | ||
|
60311341e0 | ||
|
749ebd9cc4 | ||
|
c699a14a35 | ||
|
b05a2d385c | ||
|
7c78d19e3a | ||
|
8632307cb1 | ||
|
5a18f3ce4a | ||
|
1258aff0b4 | ||
|
b0904c11a0 | ||
|
ca517eb4d9 | ||
|
c522dd2931 | ||
|
7399edee2e | ||
|
ec93b7b5a0 | ||
|
280762fff3 | ||
|
b733fa2961 | ||
|
5176f8bdc2 | ||
|
91d96b2f0e | ||
|
c3229e597c | ||
|
0f371bc5a9 | ||
|
297d5940ce | ||
|
3b27ceaf53 | ||
|
d9142c1197 | ||
|
9b3d1160d6 | ||
|
05d144c279 | ||
|
a318b66854 | ||
|
431eef5e80 | ||
|
a8d20c5a01 | ||
|
676d75646e | ||
|
6cbc438aa0 | ||
|
4a8913c98c | ||
|
9d1ecd845a | ||
|
16987aca71 | ||
|
445e8d7838 | ||
|
e521d5dcd0 | ||
|
a4ed85d33b | ||
|
65e8a7fed6 | ||
|
1052a19262 | ||
|
a2b7a5f1f0 | ||
|
9f09872e0f | ||
|
60ea033064 | ||
|
1f3badb731 | ||
|
eb0281e47f | ||
|
7fc94415fb | ||
|
8dd7d9ba26 | ||
|
b9ac43e86d | ||
|
99a5f827ae | ||
|
fbdb7e099c | ||
|
6080dabb56 | ||
|
cf1540060a | ||
|
f96a9f652d | ||
|
d969109e05 | ||
|
9a08cf6266 | ||
|
10ea575cd8 | ||
|
356876b2b2 | ||
|
f5197ec2e0 | ||
|
71af5db38e | ||
|
45195e6496 | ||
|
a56a6df557 | ||
|
d7e6a7b125 | ||
|
ddabfbc1ad | ||
|
944864ed25 | ||
|
1c795e71d5 | ||
|
7d7e1366a6 | ||
|
158a7b1517 | ||
|
03f19ec235 | ||
|
a82ec20833 | ||
|
fb8e238319 | ||
|
ab943bf006 | ||
|
b15b58f099 | ||
|
fee8d962e3 | ||
|
4b1eaddfc2 | ||
|
c0aca0e021 | ||
|
4c3910dc59 | ||
|
ec9e8cd672 | ||
|
5cbd93bba6 | ||
|
30fc0fbf54 | ||
|
d26e847d54 | ||
|
7c553c1f0b | ||
|
eb63163ddf | ||
|
6e4adc86b8 | ||
|
b46398242f | ||
|
db071b1014 | ||
|
ebf6b50126 | ||
|
ebc498f0ff | ||
|
ef4c34a31f | ||
|
1d26c12771 | ||
|
cb8b49fd7a | ||
|
b0e6d12325 | ||
|
6da6a68e33 | ||
|
a12fd4a3ae | ||
|
003d8ba02a | ||
|
acb2a8697a | ||
|
aff0e4a9df | ||
|
b7ba04dacf | ||
|
ee6c8786b2 | ||
|
4fc19b7eba | ||
|
37964a375d | ||
|
b8573d03a4 | ||
|
b104914076 | ||
|
1d30b58685 | ||
|
326baa93a7 | ||
|
ab9f26f850 | ||
|
9a944175ac | ||
|
0bcc3240b7 | ||
|
1bf3608142 | ||
|
9dc971550c | ||
|
33c52513a3 | ||
|
2408ff11f6 | ||
|
3d130e5d99 | ||
|
bc0355c5b1 | ||
|
b90b13632e | ||
|
bad57c907c | ||
|
374793eb92 | ||
|
8a6ae6105e | ||
|
ecda8eebf2 | ||
|
f0a5257921 | ||
|
860a4bdc0a | ||
|
f6ddf72323 | ||
|
ec212bb98e | ||
|
fd7d37ac23 | ||
|
b4cd0d6bbc | ||
|
0a5908e4d8 | ||
|
59f0631685 | ||
|
7718deb4a5 | ||
|
75d52b7024 | ||
|
ecc72dd01b | ||
|
6591512cf6 | ||
|
4a0e97e36a | ||
|
f90b2d9410 | ||
|
582ba0ce5d | ||
|
ce411ab9b0 | ||
|
d90468db3f | ||
|
3a621e6ff7 | ||
|
a7ffe66547 | ||
|
4a57f4d6dd | ||
|
5b72ffa575 | ||
|
04a9e2cec2 | ||
|
17022c1174 | ||
|
59914a9d87 | ||
|
a7b9653de3 | ||
|
c8dc065e24 | ||
|
bac58ad0c2 | ||
|
6b2431b054 | ||
|
7e212ebd48 | ||
|
b3223b90da | ||
|
6ea773cdd7 | ||
|
997cddcb5a | ||
|
8228f76f5d | ||
|
b35ee9ccf4 | ||
|
16942af52b | ||
|
b190ce3538 | ||
|
9027915280 | ||
|
19aaaef37e | ||
|
a3bb90e160 | ||
|
06bae0dd8b | ||
|
7d48ab5671 | ||
|
8588405aa1 | ||
|
8238ae7d0a | ||
|
78ebec01a4 | ||
|
ac1137d7e8 | ||
|
212e9b833b | ||
|
52ad0ba352 | ||
|
318d86a1f5 | ||
|
fbffba4c21 | ||
|
c7f4e5423a | ||
|
5f282a9b7d | ||
|
7539ee3560 | ||
|
032389c6c0 | ||
|
788ac54f86 | ||
|
4e0fbc8532 | ||
|
5764d9756c | ||
|
85e79922ab | ||
|
6f3826a6ff | ||
|
c061b0b777 | ||
|
fc7bbfa8e2 | ||
|
0da20c7a1b | ||
|
4e2d5fe166 | ||
|
70767678ba | ||
|
7340e146f1 | ||
|
583bc59d23 | ||
|
ff5b872fa3 | ||
|
28517a8b78 | ||
|
34138d1533 | ||
|
ccf589f093 | ||
|
3ee100e71e | ||
|
1e0547a02c | ||
|
577e1f1b56 | ||
|
a7d25125a7 | ||
|
dbb09ef5d1 | ||
|
d840c94a29 | ||
|
114980480e | ||
|
95b1a821f3 | ||
|
206397cc81 | ||
|
a6b1a6d0c2 | ||
|
aba39a3b27 | ||
|
b5f095dd91 | ||
|
a9e92d4fa6 | ||
|
867a2eacd3 | ||
|
accecf6a76 | ||
|
f12b3bc9b7 | ||
|
a2ed755c9c | ||
|
235639b728 | ||
|
b1d5882fa6 | ||
|
39e632d950 | ||
|
87ced85657 | ||
|
0c53a8db66 | ||
|
84dcbaf0e7 | ||
|
047440eaea | ||
|
217ad0234b | ||
|
9795f46bea | ||
|
10bc0098b9 | ||
|
7a900fd3d9 | ||
|
45cfb4e565 | ||
|
5320480767 | ||
|
3e18e984fa | ||
|
fce759e98f | ||
|
f4439778f1 | ||
|
11176fc212 | ||
|
ffc71da2eb | ||
|
246fa0d6e4 | ||
|
3444146da3 | ||
|
5c4a482f64 | ||
|
01f84ea11d | ||
|
08402babbd | ||
|
7ef3dcbd23 | ||
|
8836fa205b | ||
|
f544a278c5 | ||
|
4b8fd6adb9 | ||
|
1ac8a9b4ac | ||
|
08a8a69b34 | ||
|
dbd668bda5 | ||
|
cc0760553b | ||
|
1142ff6b1f | ||
|
927da5d742 | ||
|
9a734e48fe | ||
|
345fe39b54 | ||
|
c7e9d62712 | ||
|
5918095f11 | ||
|
24612eb634 | ||
|
f7125d6198 | ||
|
47870cd50c | ||
|
45fbf83971 | ||
|
6044cffef3 | ||
|
4d933e1ef7 | ||
|
181e088ad5 | ||
|
179b86c3ba | ||
|
083c15b956 | ||
|
7c780dd75c | ||
|
d35d51c014 | ||
|
14c6926360 | ||
|
bedfcb5c5d | ||
|
19461020ef | ||
|
36ecf25804 | ||
|
0229fc243a | ||
|
a2f09b305c | ||
|
32d7a0fd1b | ||
|
5d3f95762e | ||
|
4ca9ee6eec | ||
|
9026b0bfd7 | ||
|
3d30a5938a | ||
|
bcb06779b9 | ||
|
26b70f37d6 | ||
|
b20a354344 | ||
|
753f518f77 | ||
|
33d3019ffd | ||
|
26e3157ae7 | ||
|
b592528318 | ||
|
936d55d7de | ||
|
6df45fccc5 | ||
|
f43ebcce87 | ||
|
23fc261a82 | ||
|
344db19232 | ||
|
5f777845a3 | ||
|
f32bdd6c76 | ||
|
219c3c11f9 | ||
|
b3b367fcb3 | ||
|
52a43e7f30 | ||
|
04f5098d06 | ||
|
9731503826 | ||
|
b431351a22 | ||
|
089097a41c | ||
|
4468fdd76b | ||
|
79c70c59e3 | ||
|
c8ffc81527 | ||
|
048db14a08 | ||
|
a9ee07b19a | ||
|
e316d9ce6d | ||
|
6bf354cf93 | ||
|
384ebf9341 | ||
|
b2c74ba86a | ||
|
0c915de314 | ||
|
327e7efa89 | ||
|
c361b6cc07 | ||
|
59948d6746 | ||
|
1d93cf41fd | ||
|
8bbbb05adc | ||
|
6e314b6a30 | ||
|
499b2ca7ef | ||
|
77823d3f33 | ||
|
88dfb954ca | ||
|
ddc229f270 | ||
|
8af8cc2c9a | ||
|
775492b391 | ||
|
1419176094 | ||
|
aa0ca5fdcf | ||
|
0d61a3ad5d | ||
|
bdbb3d9ad1 | ||
|
fc73bddd43 | ||
|
7515578ba7 | ||
|
84b9841886 | ||
|
6b66476927 | ||
|
7357f19f81 | ||
|
f29d8322d5 | ||
|
31a3f6f4d8 | ||
|
7432a0c5cb | ||
|
f6d58191b2 | ||
|
89fbf0869a | ||
|
b1e453438e | ||
|
284c6033d3 | ||
|
b85b32560c | ||
|
35bc92bb49 | ||
|
243a5217e7 | ||
|
b2eeeed0af | ||
|
afd4700758 | ||
|
03a1601bf3 | ||
|
edfff4ec57 | ||
|
7b5bc3a25e | ||
|
d98ca0bb44 | ||
|
518b4ba5a7 | ||
|
9c1f781be3 | ||
|
fa7c1b3ec8 | ||
|
89acb9b6f3 | ||
|
45971f8f26 | ||
|
21f12b87a0 | ||
|
d264333ab8 | ||
|
0f9c1b9427 | ||
|
c273f309d4 | ||
|
17fd2f9909 | ||
|
0436701f29 | ||
|
840632b34e | ||
|
764481690c | ||
|
66b9d7421b | ||
|
a02c1557ac | ||
|
ff8af87179 | ||
|
9c8b31fdbb | ||
|
bda1413da4 | ||
|
f1cc8a10f5 | ||
|
babf462bcf | ||
|
dba24d2dee | ||
|
42066cfca2 | ||
|
32e550c8e0 | ||
|
4f2c94a5a8 | ||
|
95076bdb6a | ||
|
547caadeb2 | ||
|
2469e1e811 | ||
|
ded267c9ac | ||
|
2c9733e739 | ||
|
72fd263ddf | ||
|
8b84a4b336 | ||
|
3caf1f2d36 | ||
|
16391fe99c | ||
|
6d3c858cbe | ||
|
7afe9fac0a | ||
|
e6a2c10a19 | ||
|
cc9867bcc4 | ||
|
ba7ae19533 | ||
|
47fa9e3956 | ||
|
0b739b0e3f | ||
|
221e912645 | ||
|
81f4e92231 | ||
|
4fef85d5d0 | ||
|
04a6b09861 | ||
|
e31842d768 | ||
|
e99efae839 | ||
|
36f91aa11b | ||
|
140658c1a3 | ||
|
38be52d12f | ||
|
a7fd8069c2 | ||
|
2df57bf684 | ||
|
4a6cac96f6 | ||
|
0e6eb89cea | ||
|
0c883259d9 | ||
|
13bd98b842 | ||
|
c641046aa5 | ||
|
05bddbb40e | ||
|
4de6d10e27 | ||
|
253ed7b2bd | ||
|
0d38741de7 | ||
|
b5cef50dc7 | ||
|
16ee3df31f | ||
|
341478db73 | ||
|
ef1bf7c3e6 | ||
|
ee5b64904d | ||
|
0ff3b95f89 | ||
|
b70c904ec3 | ||
|
3e3465fb56 | ||
|
9e37a107ee | ||
|
4de2512b34 | ||
|
90d4545a1f | ||
|
8561f3e177 | ||
|
51b5b3a846 | ||
|
1401282aa0 | ||
|
8b81526e54 | ||
|
a16b6cb2b8 | ||
|
7876030737 | ||
|
402d5748e4 | ||
|
280975b81a | ||
|
6f8778d87f | ||
|
fbf7578fb0 | ||
|
7dd560a2e3 | ||
|
0b2e1bc8e2 | ||
|
baea455fde | ||
|
eb303157ca | ||
|
733b0d183f | ||
|
66233b7b00 | ||
|
46a820fda5 | ||
|
0244989b94 | ||
|
990c369cab | ||
|
af501952c2 | ||
|
d7ba71b1c0 | ||
|
b8df070d93 | ||
|
c55c4e0e89 | ||
|
4249336320 | ||
|
903b9bfd08 | ||
|
e32a4a84a8 | ||
|
b42d8d1e30 | ||
|
e9e9a359c8 | ||
|
b3f424fa28 | ||
|
ba740322f4 | ||
|
898a517ae9 | ||
|
c2c8c42ef3 | ||
|
4d9c4a415d | ||
|
f4fe930430 | ||
|
04dfeaf488 | ||
|
797064a119 | ||
|
4d8d9cb87d | ||
|
d1ae2cffcb | ||
|
102412cdb9 | ||
|
f9ef5868cc | ||
|
d9b2112b19 | ||
|
5edcd97c78 | ||
|
9227a3039e | ||
|
f97521c118 | ||
|
119870fe9a | ||
|
f4942e32ed | ||
|
0ef5c10749 | ||
|
d37fc311db | ||
|
7b05b78cf7 | ||
|
576a429426 | ||
|
47ef0c3a0b | ||
|
66303f614b | ||
|
98358f7578 | ||
|
8486b846f2 | ||
|
6cb35137cb | ||
|
f6182412a0 | ||
|
a67c87101d | ||
|
84b32514df |
@@ -60,7 +60,7 @@ APP_LOG_LEVEL=info
|
||||
# Use "pgsql" for PostgreSQL
|
||||
# Use "mysql" for MySQL and MariaDB.
|
||||
# Use "sqlite" for SQLite.
|
||||
DB_CONNECTION=sqlite_test
|
||||
DB_CONNECTION=sqlite
|
||||
|
||||
# MySQL supports SSL. You can configure it here.
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
@@ -127,7 +127,6 @@ MAIL_ENCRYPTION=null
|
||||
MAILGUN_DOMAIN=
|
||||
MAILGUN_SECRET=
|
||||
|
||||
|
||||
# If you are on EU region in mailgun, use api.eu.mailgun.net, otherwise use api.mailgun.net
|
||||
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||
MAILGUN_ENDPOINT=api.mailgun.net
|
||||
@@ -136,7 +135,6 @@ MAILGUN_ENDPOINT=api.mailgun.net
|
||||
MANDRILL_SECRET=
|
||||
SPARKPOST_SECRET=
|
||||
|
||||
|
||||
# Firefly III can send you the following messages
|
||||
SEND_REGISTRATION_MAIL=true
|
||||
SEND_ERROR_MESSAGE=true
|
||||
@@ -223,7 +221,6 @@ ADLDAP_ADMIN_PASSWORD=
|
||||
ADLDAP_ACCOUNT_PREFIX=
|
||||
ADLDAP_ACCOUNT_SUFFIX=
|
||||
|
||||
|
||||
# LDAP authentication settings.
|
||||
ADLDAP_PASSWORD_SYNC=false
|
||||
ADLDAP_LOGIN_FALLBACK=false
|
||||
@@ -304,7 +301,6 @@ PUSHER_ID=
|
||||
DEMO_USERNAME=
|
||||
DEMO_PASSWORD=
|
||||
USE_ENCRYPTION=false
|
||||
IS_HEROKU=false
|
||||
FIREFLY_III_LAYOUT=v1
|
||||
|
||||
#
|
||||
|
@@ -1,250 +1,250 @@
|
||||
parameters:
|
||||
indentation: spaces
|
||||
indentation: spaces
|
||||
|
||||
file_extensions:
|
||||
- php
|
||||
file_extensions:
|
||||
- php
|
||||
|
||||
exclude_files:
|
||||
- fixtures/*
|
||||
- fixtures*/*
|
||||
- temp/*
|
||||
- tmp/*
|
||||
exclude_files:
|
||||
- fixtures/*
|
||||
- fixtures*/*
|
||||
- temp/*
|
||||
- tmp/*
|
||||
|
||||
services:
|
||||
# Checkers bellow aim on 1:1 copy of https://nette.org/en/coding-standard
|
||||
# Checkers bellow aim on 1:1 copy of https://nette.org/en/coding-standard
|
||||
|
||||
# General rules - https://nette.org/en/coding-standard#toc-general-rules
|
||||
# General rules - https://nette.org/en/coding-standard#toc-general-rules
|
||||
|
||||
# use tabs over spaces
|
||||
# PHP_CodeSniffer\Standards\Generic\Sniffs\WhiteSpace\DisallowSpaceIndentSniff: ~
|
||||
# PHP code must use only UTF-8 without BOM
|
||||
PhpCsFixer\Fixer\Basic\EncodingFixer: ~
|
||||
# <?php opening tag
|
||||
PhpCsFixer\Fixer\PhpTag\FullOpeningTagFixer: ~
|
||||
# Ensure there is no code on the same line as the PHP open tag.
|
||||
PhpCsFixer\Fixer\PhpTag\LinebreakAfterOpeningTagFixer: ~
|
||||
# The closing ?> tag must be omitted from files containing only PHP.
|
||||
PhpCsFixer\Fixer\PhpTag\NoClosingTagFixer: ~
|
||||
# There must not be trailing whitespace at the end of lines.
|
||||
PhpCsFixer\Fixer\Whitespace\NoTrailingWhitespaceFixer: ~
|
||||
# ...and at the end of blank lines.
|
||||
PhpCsFixer\Fixer\Whitespace\NoWhitespaceInBlankLineFixer: ~
|
||||
# All files must end with a single blank line.
|
||||
PhpCsFixer\Fixer\Whitespace\SingleBlankLineAtEofFixer: ~
|
||||
# File name should match class name if possible.
|
||||
PhpCsFixer\Fixer\Basic\Psr4Fixer: ~
|
||||
# Enforces using shorthand scalar typehint variants in phpDocs: `int` instead of `integer` and `bool` instead of `boolean`
|
||||
SlevomatCodingStandard\Sniffs\TypeHints\LongTypeHintsSniff: ~
|
||||
# use tabs over spaces
|
||||
# PHP_CodeSniffer\Standards\Generic\Sniffs\WhiteSpace\DisallowSpaceIndentSniff: ~
|
||||
# PHP code must use only UTF-8 without BOM
|
||||
PhpCsFixer\Fixer\Basic\EncodingFixer: ~
|
||||
# <?php opening tag
|
||||
PhpCsFixer\Fixer\PhpTag\FullOpeningTagFixer: ~
|
||||
# Ensure there is no code on the same line as the PHP open tag.
|
||||
PhpCsFixer\Fixer\PhpTag\LinebreakAfterOpeningTagFixer: ~
|
||||
# The closing ?> tag must be omitted from files containing only PHP.
|
||||
PhpCsFixer\Fixer\PhpTag\NoClosingTagFixer: ~
|
||||
# There must not be trailing whitespace at the end of lines.
|
||||
PhpCsFixer\Fixer\Whitespace\NoTrailingWhitespaceFixer: ~
|
||||
# ...and at the end of blank lines.
|
||||
PhpCsFixer\Fixer\Whitespace\NoWhitespaceInBlankLineFixer: ~
|
||||
# All files must end with a single blank line.
|
||||
PhpCsFixer\Fixer\Whitespace\SingleBlankLineAtEofFixer: ~
|
||||
# File name should match class name if possible.
|
||||
PhpCsFixer\Fixer\Basic\Psr4Fixer: ~
|
||||
# Enforces using shorthand scalar typehint variants in phpDocs: `int` instead of `integer` and `bool` instead of `boolean`
|
||||
SlevomatCodingStandard\Sniffs\TypeHints\LongTypeHintsSniff: ~
|
||||
|
||||
# File Header - https://nette.org/en/coding-standard#toc-file-header
|
||||
# File Header - https://nette.org/en/coding-standard#toc-file-header
|
||||
|
||||
# empty line before namespace
|
||||
PhpCsFixer\Fixer\NamespaceNotation\SingleBlankLineBeforeNamespaceFixer: ~
|
||||
# 1 Use statement per line
|
||||
PhpCsFixer\Fixer\Import\SingleImportPerStatementFixer: ~
|
||||
# Use statements are alphabetically ordered
|
||||
PhpCsFixer\Fixer\Import\OrderedImportsFixer: ~
|
||||
# disallow group use declarations use FooLibrary\Bar\Baz\{ ClassA, ClassB, ClassC, ClassD as Fizbo }
|
||||
SlevomatCodingStandard\Sniffs\Namespaces\DisallowGroupUseSniff: ~
|
||||
# Disallows leading backslash in use statement: use \Foo\Bar;
|
||||
SlevomatCodingStandard\Sniffs\Namespaces\UseDoesNotStartWithBackslashSniff: ~
|
||||
# Looks for unused imports from other namespaces.
|
||||
Nette\CodingStandard\Sniffs\Namespaces\UnusedUsesSniff:
|
||||
searchAnnotations: yes
|
||||
ignoredAnnotationNames: ['@testCase']
|
||||
ignoredAnnotations: ['@internal']
|
||||
# empty line before namespace
|
||||
PhpCsFixer\Fixer\NamespaceNotation\SingleBlankLineBeforeNamespaceFixer: ~
|
||||
# 1 Use statement per line
|
||||
PhpCsFixer\Fixer\Import\SingleImportPerStatementFixer: ~
|
||||
# Use statements are alphabetically ordered
|
||||
PhpCsFixer\Fixer\Import\OrderedImportsFixer: ~
|
||||
# disallow group use declarations use FooLibrary\Bar\Baz\{ ClassA, ClassB, ClassC, ClassD as Fizbo }
|
||||
SlevomatCodingStandard\Sniffs\Namespaces\DisallowGroupUseSniff: ~
|
||||
# Disallows leading backslash in use statement: use \Foo\Bar;
|
||||
SlevomatCodingStandard\Sniffs\Namespaces\UseDoesNotStartWithBackslashSniff: ~
|
||||
# Looks for unused imports from other namespaces.
|
||||
Nette\CodingStandard\Sniffs\Namespaces\UnusedUsesSniff:
|
||||
searchAnnotations: yes
|
||||
ignoredAnnotationNames: [ '@testCase' ]
|
||||
ignoredAnnotations: [ '@internal' ]
|
||||
|
||||
# Language Construct (should be placed before some other fixers)
|
||||
# Language Construct (should be placed before some other fixers)
|
||||
|
||||
# Functions should be used with `$strict` param set to `true`
|
||||
PhpCsFixer\Fixer\Strict\StrictParamFixer: ~
|
||||
# replaces is_null(parameter) expression with `null === parameter`.
|
||||
PhpCsFixer\Fixer\LanguageConstruct\IsNullFixer:
|
||||
use_yoda_style: true
|
||||
# Calling `unset` on multiple items should be done in one call.
|
||||
PhpCsFixer\Fixer\LanguageConstruct\CombineConsecutiveUnsetsFixer: ~
|
||||
# Replace all `<>` with `!=`.
|
||||
PhpCsFixer\Fixer\Operator\StandardizeNotEqualsFixer: ~
|
||||
# Include/Require and file path should be divided with a single space. File path should not be placed under brackets.
|
||||
PhpCsFixer\Fixer\ControlStructure\IncludeFixer: ~
|
||||
# Requires short ternary operator ?: when possible
|
||||
SlevomatCodingStandard\Sniffs\ControlStructures\RequireShortTernaryOperatorSniff: ~
|
||||
# Functions should be used with `$strict` param set to `true`
|
||||
PhpCsFixer\Fixer\Strict\StrictParamFixer: ~
|
||||
# replaces is_null(parameter) expression with `null === parameter`.
|
||||
PhpCsFixer\Fixer\LanguageConstruct\IsNullFixer:
|
||||
use_yoda_style: true
|
||||
# Calling `unset` on multiple items should be done in one call.
|
||||
PhpCsFixer\Fixer\LanguageConstruct\CombineConsecutiveUnsetsFixer: ~
|
||||
# Replace all `<>` with `!=`.
|
||||
PhpCsFixer\Fixer\Operator\StandardizeNotEqualsFixer: ~
|
||||
# Include/Require and file path should be divided with a single space. File path should not be placed under brackets.
|
||||
PhpCsFixer\Fixer\ControlStructure\IncludeFixer: ~
|
||||
# Requires short ternary operator ?: when possible
|
||||
SlevomatCodingStandard\Sniffs\ControlStructures\RequireShortTernaryOperatorSniff: ~
|
||||
|
||||
# Arrays - https://nette.org/en/coding-standard#toc-arrays
|
||||
# Arrays - https://nette.org/en/coding-standard#toc-arrays
|
||||
|
||||
# use short array fixes
|
||||
PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer:
|
||||
syntax: short
|
||||
# use trailing command in last array element
|
||||
PhpCsFixer\Fixer\ArrayNotation\TrailingCommaInMultilineArrayFixer: ~
|
||||
# PHP single-line arrays should not have trailing comma.
|
||||
# PhpCsFixer\Fixer\ArrayNotation\NoTrailingCommaInSinglelineArrayFixer: ~
|
||||
# In array declaration, there MUST NOT be a whitespace before each comma.
|
||||
PhpCsFixer\Fixer\ArrayNotation\NoWhitespaceBeforeCommaInArrayFixer: ~
|
||||
# Arrays should be formatted like function/method arguments, without leading or trailing single line space.
|
||||
PhpCsFixer\Fixer\ArrayNotation\TrimArraySpacesFixer: ~
|
||||
# In array declaration, there MUST be a whitespace after each comma.
|
||||
PhpCsFixer\Fixer\ArrayNotation\WhitespaceAfterCommaInArrayFixer: ~
|
||||
# use short array fixes
|
||||
PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer:
|
||||
syntax: short
|
||||
# use trailing command in last array element
|
||||
PhpCsFixer\Fixer\ArrayNotation\TrailingCommaInMultilineArrayFixer: ~
|
||||
# PHP single-line arrays should not have trailing comma.
|
||||
# PhpCsFixer\Fixer\ArrayNotation\NoTrailingCommaInSinglelineArrayFixer: ~
|
||||
# In array declaration, there MUST NOT be a whitespace before each comma.
|
||||
PhpCsFixer\Fixer\ArrayNotation\NoWhitespaceBeforeCommaInArrayFixer: ~
|
||||
# Arrays should be formatted like function/method arguments, without leading or trailing single line space.
|
||||
PhpCsFixer\Fixer\ArrayNotation\TrimArraySpacesFixer: ~
|
||||
# In array declaration, there MUST be a whitespace after each comma.
|
||||
PhpCsFixer\Fixer\ArrayNotation\WhitespaceAfterCommaInArrayFixer: ~
|
||||
|
||||
# Strings
|
||||
# Strings
|
||||
|
||||
# Convert `heredoc` to `nowdoc` where possible.
|
||||
PhpCsFixer\Fixer\StringNotation\HeredocToNowdocFixer: ~
|
||||
# Convert double quotes to single quotes for simple strings.
|
||||
PhpCsFixer\Fixer\StringNotation\SingleQuoteFixer: ~
|
||||
# Convert `heredoc` to `nowdoc` where possible.
|
||||
PhpCsFixer\Fixer\StringNotation\HeredocToNowdocFixer: ~
|
||||
# Convert double quotes to single quotes for simple strings.
|
||||
PhpCsFixer\Fixer\StringNotation\SingleQuoteFixer: ~
|
||||
|
||||
# Keywords and True/False/Null - https://nette.org/en/coding-standard#toc-keywords-and-true-false-null
|
||||
# Keywords and True/False/Null - https://nette.org/en/coding-standard#toc-keywords-and-true-false-null
|
||||
|
||||
# PHP keywords must be in lower case
|
||||
PhpCsFixer\Fixer\Casing\LowercaseKeywordsFixer: ~
|
||||
# The PHP constants `true`, `false`, and `null` MUST be in lower case
|
||||
PhpCsFixer\Fixer\Casing\LowercaseConstantsFixer: ~
|
||||
# PHP keywords must be in lower case
|
||||
PhpCsFixer\Fixer\Casing\LowercaseKeywordsFixer: ~
|
||||
# The PHP constants `true`, `false`, and `null` MUST be in lower case
|
||||
PhpCsFixer\Fixer\Casing\LowercaseConstantsFixer: ~
|
||||
|
||||
# Method and Functions Calls - https://nette.org/en/coding-standard#toc-method-and-function-calls
|
||||
# Method and Functions Calls - https://nette.org/en/coding-standard#toc-method-and-function-calls
|
||||
|
||||
# Function defined by PHP should be called using the correct casing
|
||||
PhpCsFixer\Fixer\Casing\NativeFunctionCasingFixer: ~
|
||||
# In the argument list, there must be one space after each comma, and there must no be a space before each comma
|
||||
PhpCsFixer\Fixer\FunctionNotation\MethodArgumentSpaceFixer: ~
|
||||
# This sniff checks that there are two blank lines between functions declarations and single between signatures.
|
||||
#Nette\CodingStandard\Sniffs\WhiteSpace\FunctionSpacingSniff: ~
|
||||
# Function defined by PHP should be called using the correct casing
|
||||
PhpCsFixer\Fixer\Casing\NativeFunctionCasingFixer: ~
|
||||
# In the argument list, there must be one space after each comma, and there must no be a space before each comma
|
||||
PhpCsFixer\Fixer\FunctionNotation\MethodArgumentSpaceFixer: ~
|
||||
# This sniff checks that there are two blank lines between functions declarations and single between signatures.
|
||||
#Nette\CodingStandard\Sniffs\WhiteSpace\FunctionSpacingSniff: ~
|
||||
|
||||
# Classes - https://nette.org/en/coding-standard#toc-classes
|
||||
# Classes - https://nette.org/en/coding-standard#toc-classes
|
||||
|
||||
# Inside a classy element "self" should be preferred to the class name itself.
|
||||
PhpCsFixer\Fixer\ClassNotation\SelfAccessorFixer: ~
|
||||
# class element order: constants, properties, from public to private
|
||||
PhpCsFixer\Fixer\ClassNotation\OrderedClassElementsFixer:
|
||||
order:
|
||||
- use_trait
|
||||
- constant
|
||||
- constant_public
|
||||
- constant_protected
|
||||
- constant_private
|
||||
- property_public
|
||||
- property_protected
|
||||
- property_private
|
||||
# Inside a classy element "self" should be preferred to the class name itself.
|
||||
PhpCsFixer\Fixer\ClassNotation\SelfAccessorFixer: ~
|
||||
# class element order: constants, properties, from public to private
|
||||
PhpCsFixer\Fixer\ClassNotation\OrderedClassElementsFixer:
|
||||
order:
|
||||
- use_trait
|
||||
- constant
|
||||
- constant_public
|
||||
- constant_protected
|
||||
- constant_private
|
||||
- property_public
|
||||
- property_protected
|
||||
- property_private
|
||||
|
||||
# Constants - https://nette.org/en/coding-standard#toc-constants
|
||||
# Constants - https://nette.org/en/coding-standard#toc-constants
|
||||
|
||||
# constant names are CAPITALIZED (manuall fixing only :()
|
||||
PHP_CodeSniffer\Standards\Generic\Sniffs\NamingConventions\UpperCaseConstantNameSniff: ~
|
||||
# constant names are CAPITALIZED (manuall fixing only :()
|
||||
PHP_CodeSniffer\Standards\Generic\Sniffs\NamingConventions\UpperCaseConstantNameSniff: ~
|
||||
|
||||
# Class Properties - https://nette.org/en/coding-standard#toc-class-properties
|
||||
# Class Properties - https://nette.org/en/coding-standard#toc-class-properties
|
||||
|
||||
# There MUST NOT be more than one property declared per statement.
|
||||
PhpCsFixer\Fixer\ClassNotation\SingleClassElementPerStatementFixer:
|
||||
elements: ['property']
|
||||
# There MUST NOT be more than one property declared per statement.
|
||||
PhpCsFixer\Fixer\ClassNotation\SingleClassElementPerStatementFixer:
|
||||
elements: [ 'property' ]
|
||||
|
||||
# Methods - https://nette.org/en/coding-standard#toc-methods
|
||||
# Methods - https://nette.org/en/coding-standard#toc-methods
|
||||
|
||||
# They must be declared in camelCase.
|
||||
PHP_CodeSniffer\Standards\PSR1\Sniffs\Methods\CamelCapsMethodNameSniff: ~
|
||||
# Checks that there's a single space between a typehint and a parameter name and no whitespace between a nullability symbol and a typehint
|
||||
SlevomatCodingStandard\Sniffs\TypeHints\ParameterTypeHintSpacingSniff: ~
|
||||
# Spaces should be properly placed in a function declaration.
|
||||
PhpCsFixer\Fixer\FunctionNotation\FunctionDeclarationFixer: ~
|
||||
# In function arguments there must not be arguments with default values before non-default ones.
|
||||
PhpCsFixer\Fixer\FunctionNotation\NoUnreachableDefaultArgumentValueFixer: ~
|
||||
# They must be declared in camelCase.
|
||||
PHP_CodeSniffer\Standards\PSR1\Sniffs\Methods\CamelCapsMethodNameSniff: ~
|
||||
# Checks that there's a single space between a typehint and a parameter name and no whitespace between a nullability symbol and a typehint
|
||||
SlevomatCodingStandard\Sniffs\TypeHints\ParameterTypeHintSpacingSniff: ~
|
||||
# Spaces should be properly placed in a function declaration.
|
||||
PhpCsFixer\Fixer\FunctionNotation\FunctionDeclarationFixer: ~
|
||||
# In function arguments there must not be arguments with default values before non-default ones.
|
||||
PhpCsFixer\Fixer\FunctionNotation\NoUnreachableDefaultArgumentValueFixer: ~
|
||||
|
||||
# Constans, Class Properties, Methods
|
||||
# Constans, Class Properties, Methods
|
||||
|
||||
# Constants and Properties should be separated by 1 blank line
|
||||
#PhpCsFixer\Fixer\ClassNotation\ClassAttributesSeparationFixer:
|
||||
# elements: [const, property]
|
||||
# Constants and Properties should be separated by 1 blank line
|
||||
#PhpCsFixer\Fixer\ClassNotation\ClassAttributesSeparationFixer:
|
||||
# elements: [const, property]
|
||||
|
||||
# Last property and 1st method should be separated by 2 spaces
|
||||
Nette\CodingStandard\Fixer\ClassNotation\LastPropertyAndFirstMethodSeparationFixer:
|
||||
space_count: 2
|
||||
# Last property and 1st method should be separated by 2 spaces
|
||||
Nette\CodingStandard\Fixer\ClassNotation\LastPropertyAndFirstMethodSeparationFixer:
|
||||
space_count: 2
|
||||
|
||||
# Control Statements - https://nette.org/en/coding-standard#toc-control-statements
|
||||
# Control Statements - https://nette.org/en/coding-standard#toc-control-statements
|
||||
|
||||
# The keyword `elseif` should be used instead of `else if` so that all control keywords look like single words.
|
||||
PhpCsFixer\Fixer\ControlStructure\ElseifFixer: ~
|
||||
# Remove useless semicolon statements.
|
||||
PhpCsFixer\Fixer\Semicolon\NoEmptyStatementFixer: ~
|
||||
# Remove trailing commas in list() calls.
|
||||
PhpCsFixer\Fixer\ControlStructure\NoTrailingCommaInListCallFixer: ~
|
||||
# Removes unneeded parentheses around control statements.
|
||||
PhpCsFixer\Fixer\ControlStructure\NoUnneededControlParenthesesFixer: ~
|
||||
# A case should be followed by a colon and not a semicolon.
|
||||
PhpCsFixer\Fixer\ControlStructure\SwitchCaseSemicolonToColonFixer: ~
|
||||
# The structure body must be indented once.
|
||||
# The closing brace must be on the next line after the body.
|
||||
# There should not be more than one statement per line.
|
||||
#Nette\CodingStandard\Fixer\Basic\BracesFixer:
|
||||
# allow_single_line_closure: true
|
||||
# changes if (1 === $cond) to if ($cond === 1)
|
||||
#SlevomatCodingStandard\Sniffs\ControlStructures\DisallowYodaComparisonSniff: ~
|
||||
# finds unreachable catch blocks:
|
||||
SlevomatCodingStandard\Sniffs\Exceptions\DeadCatchSniff: ~
|
||||
# The keyword `elseif` should be used instead of `else if` so that all control keywords look like single words.
|
||||
PhpCsFixer\Fixer\ControlStructure\ElseifFixer: ~
|
||||
# Remove useless semicolon statements.
|
||||
PhpCsFixer\Fixer\Semicolon\NoEmptyStatementFixer: ~
|
||||
# Remove trailing commas in list() calls.
|
||||
PhpCsFixer\Fixer\ControlStructure\NoTrailingCommaInListCallFixer: ~
|
||||
# Removes unneeded parentheses around control statements.
|
||||
PhpCsFixer\Fixer\ControlStructure\NoUnneededControlParenthesesFixer: ~
|
||||
# A case should be followed by a colon and not a semicolon.
|
||||
PhpCsFixer\Fixer\ControlStructure\SwitchCaseSemicolonToColonFixer: ~
|
||||
# The structure body must be indented once.
|
||||
# The closing brace must be on the next line after the body.
|
||||
# There should not be more than one statement per line.
|
||||
#Nette\CodingStandard\Fixer\Basic\BracesFixer:
|
||||
# allow_single_line_closure: true
|
||||
# changes if (1 === $cond) to if ($cond === 1)
|
||||
#SlevomatCodingStandard\Sniffs\ControlStructures\DisallowYodaComparisonSniff: ~
|
||||
# finds unreachable catch blocks:
|
||||
SlevomatCodingStandard\Sniffs\Exceptions\DeadCatchSniff: ~
|
||||
|
||||
# Casting
|
||||
# Casting
|
||||
|
||||
# A single space or none should be between cast and variable (int) $val
|
||||
PhpCsFixer\Fixer\CastNotation\CastSpacesFixer: ~
|
||||
# Cast should be written in lower case.
|
||||
PhpCsFixer\Fixer\CastNotation\LowercaseCastFixer: ~
|
||||
# Replaces `intval`, `floatval`, `doubleval`, `strval` and `boolval` function calls with according type casting operator
|
||||
PhpCsFixer\Fixer\CastNotation\ModernizeTypesCastingFixer: ~
|
||||
# Short cast `bool` using double exclamation mark should not be used
|
||||
PhpCsFixer\Fixer\CastNotation\NoShortBoolCastFixer: ~
|
||||
# Cast `(boolean)` and `(integer)` should be written as `(bool)` and `(int)`, `(double)` and `(real)` as `(float)`
|
||||
PhpCsFixer\Fixer\CastNotation\ShortScalarCastFixer: ~
|
||||
# A single space or none should be between cast and variable (int) $val
|
||||
PhpCsFixer\Fixer\CastNotation\CastSpacesFixer: ~
|
||||
# Cast should be written in lower case.
|
||||
PhpCsFixer\Fixer\CastNotation\LowercaseCastFixer: ~
|
||||
# Replaces `intval`, `floatval`, `doubleval`, `strval` and `boolval` function calls with according type casting operator
|
||||
PhpCsFixer\Fixer\CastNotation\ModernizeTypesCastingFixer: ~
|
||||
# Short cast `bool` using double exclamation mark should not be used
|
||||
PhpCsFixer\Fixer\CastNotation\NoShortBoolCastFixer: ~
|
||||
# Cast `(boolean)` and `(integer)` should be written as `(bool)` and `(int)`, `(double)` and `(real)` as `(float)`
|
||||
PhpCsFixer\Fixer\CastNotation\ShortScalarCastFixer: ~
|
||||
|
||||
# Language Whitespace
|
||||
# Language Whitespace
|
||||
|
||||
# Binary operators should be surrounded by at least one space. DO NOT USE
|
||||
#PhpCsFixer\Fixer\Operator\BinaryOperatorSpacesFixer: ~
|
||||
# Unary operators should be placed adjacent to their operands.
|
||||
PhpCsFixer\Fixer\Operator\UnaryOperatorSpacesFixer: ~
|
||||
# No space after the opening parenthesis and before the closing parenthesis
|
||||
PhpCsFixer\Fixer\Whitespace\NoSpacesInsideParenthesisFixer: ~
|
||||
# There MUST NOT be spaces around offset braces $a[0]
|
||||
PhpCsFixer\Fixer\Whitespace\NoSpacesAroundOffsetFixer: ~
|
||||
# There should not be space before or after object `T_OBJECT_OPERATOR` `->`.
|
||||
PhpCsFixer\Fixer\Operator\ObjectOperatorWithoutWhitespaceFixer: ~
|
||||
# Standardize spaces around ternary operator.
|
||||
PhpCsFixer\Fixer\Operator\TernaryOperatorSpacesFixer: ~
|
||||
# Concatenation $a . $b should be spaced according configuration
|
||||
PhpCsFixer\Fixer\Operator\ConcatSpaceFixer:
|
||||
spacing: one
|
||||
# Removes extra spaces between colon and case value.
|
||||
PhpCsFixer\Fixer\ControlStructure\SwitchCaseSpaceFixer: ~
|
||||
# Binary operators should be surrounded by at least one space. DO NOT USE
|
||||
#PhpCsFixer\Fixer\Operator\BinaryOperatorSpacesFixer: ~
|
||||
# Unary operators should be placed adjacent to their operands.
|
||||
PhpCsFixer\Fixer\Operator\UnaryOperatorSpacesFixer: ~
|
||||
# No space after the opening parenthesis and before the closing parenthesis
|
||||
PhpCsFixer\Fixer\Whitespace\NoSpacesInsideParenthesisFixer: ~
|
||||
# There MUST NOT be spaces around offset braces $a[0]
|
||||
PhpCsFixer\Fixer\Whitespace\NoSpacesAroundOffsetFixer: ~
|
||||
# There should not be space before or after object `T_OBJECT_OPERATOR` `->`.
|
||||
PhpCsFixer\Fixer\Operator\ObjectOperatorWithoutWhitespaceFixer: ~
|
||||
# Standardize spaces around ternary operator.
|
||||
PhpCsFixer\Fixer\Operator\TernaryOperatorSpacesFixer: ~
|
||||
# Concatenation $a . $b should be spaced according configuration
|
||||
PhpCsFixer\Fixer\Operator\ConcatSpaceFixer:
|
||||
spacing: one
|
||||
# Removes extra spaces between colon and case value.
|
||||
PhpCsFixer\Fixer\ControlStructure\SwitchCaseSpaceFixer: ~
|
||||
|
||||
# Comments
|
||||
# Comments
|
||||
|
||||
# Docblocks should have the same indentation as the documented subject.
|
||||
PhpCsFixer\Fixer\Phpdoc\PhpdocIndentFixer: ~
|
||||
# There should not be any empty comments.
|
||||
PhpCsFixer\Fixer\Comment\NoEmptyCommentFixer: ~
|
||||
# There should not be empty PHPDoc blocks.
|
||||
#PhpCsFixer\Fixer\Phpdoc\NoEmptyPhpdocFixer: ~
|
||||
# Phpdocs should start and end with content, excluding the very first and last line of the docblocks.
|
||||
PhpCsFixer\Fixer\Phpdoc\PhpdocTrimFixer: ~
|
||||
# Single-line comments comments with only one line of actual content should use the `//` syntax.
|
||||
PhpCsFixer\Fixer\Comment\SingleLineCommentStyleFixer:
|
||||
comment_types: ['hash']
|
||||
# Require comments with single-line content to be written as one-liners
|
||||
SlevomatCodingStandard\Sniffs\Commenting\RequireOneLinePropertyDocCommentSniff: ~
|
||||
# Docblocks should have the same indentation as the documented subject.
|
||||
PhpCsFixer\Fixer\Phpdoc\PhpdocIndentFixer: ~
|
||||
# There should not be any empty comments.
|
||||
PhpCsFixer\Fixer\Comment\NoEmptyCommentFixer: ~
|
||||
# There should not be empty PHPDoc blocks.
|
||||
#PhpCsFixer\Fixer\Phpdoc\NoEmptyPhpdocFixer: ~
|
||||
# Phpdocs should start and end with content, excluding the very first and last line of the docblocks.
|
||||
PhpCsFixer\Fixer\Phpdoc\PhpdocTrimFixer: ~
|
||||
# Single-line comments comments with only one line of actual content should use the `//` syntax.
|
||||
PhpCsFixer\Fixer\Comment\SingleLineCommentStyleFixer:
|
||||
comment_types: [ 'hash' ]
|
||||
# Require comments with single-line content to be written as one-liners
|
||||
SlevomatCodingStandard\Sniffs\Commenting\RequireOneLinePropertyDocCommentSniff: ~
|
||||
|
||||
|
||||
# Properties MUST not be explicitly initialized with `null`.
|
||||
#PhpCsFixer\Fixer\ClassNotation\NoNullPropertyInitializationFixer: ~
|
||||
# Properties MUST not be explicitly initialized with `null`.
|
||||
#PhpCsFixer\Fixer\ClassNotation\NoNullPropertyInitializationFixer: ~
|
||||
|
||||
PhpCsFixer\Fixer\ControlStructure\NoBreakCommentFixer:
|
||||
comment_text: 'break omitted'
|
||||
PhpCsFixer\Fixer\ControlStructure\NoBreakCommentFixer:
|
||||
comment_text: 'break omitted'
|
||||
|
||||
# declare(strict_types=1);
|
||||
PhpCsFixer\Fixer\Strict\DeclareStrictTypesFixer: ~
|
||||
# Enforces consistent formatting of return typehints: function foo(): ?int
|
||||
SlevomatCodingStandard\Sniffs\TypeHints\ReturnTypeHintSpacingSniff: ~
|
||||
# Use `null` coalescing operator `??` where possible.
|
||||
PhpCsFixer\Fixer\Operator\TernaryToNullCoalescingFixer: ~
|
||||
# declare(strict_types=1);
|
||||
PhpCsFixer\Fixer\Strict\DeclareStrictTypesFixer: ~
|
||||
# Enforces consistent formatting of return typehints: function foo(): ?int
|
||||
SlevomatCodingStandard\Sniffs\TypeHints\ReturnTypeHintSpacingSniff: ~
|
||||
# Use `null` coalescing operator `??` where possible.
|
||||
PhpCsFixer\Fixer\Operator\TernaryToNullCoalescingFixer: ~
|
||||
|
||||
Nette\CodingStandard\Fixer\ClassNotation\ClassAndTraitVisibilityRequiredFixer:
|
||||
elements: ['const', 'property', 'method']
|
||||
Nette\CodingStandard\Fixer\ClassNotation\ClassAndTraitVisibilityRequiredFixer:
|
||||
elements: [ 'const', 'property', 'method' ]
|
||||
|
||||
# short list() syntax []
|
||||
PhpCsFixer\Fixer\ListNotation\ListSyntaxFixer:
|
||||
syntax: short
|
||||
# short list() syntax []
|
||||
PhpCsFixer\Fixer\ListNotation\ListSyntaxFixer:
|
||||
syntax: short
|
||||
|
2
.ci/php-cs-fixer/.gitignore
vendored
Normal file
2
.ci/php-cs-fixer/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
vendor
|
||||
.php-cs-fixer.cache
|
44
.ci/php-cs-fixer/.php-cs-fixer.php
Normal file
44
.ci/php-cs-fixer/.php-cs-fixer.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/*
|
||||
* .php-cs-fixer.php
|
||||
* Copyright (c) 2022 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/>.
|
||||
*/
|
||||
|
||||
$current = __DIR__;
|
||||
|
||||
$paths = [
|
||||
$current . '/../../app',
|
||||
$current . '/../../config',
|
||||
$current . '/../../database',
|
||||
$current . '/../../routes',
|
||||
$current . '/../../tests',
|
||||
$current . '/../../resources/lang',
|
||||
];
|
||||
|
||||
$finder = PhpCsFixer\Finder::create()
|
||||
->in($paths);
|
||||
|
||||
|
||||
$config = new PhpCsFixer\Config();
|
||||
return $config->setRules([
|
||||
'@PSR12' => true,
|
||||
'declare_strict_types' => true,
|
||||
'strict_param' => true,
|
||||
'array_syntax' => ['syntax' => 'short'],
|
||||
])
|
||||
->setFinder($finder);
|
5
.ci/php-cs-fixer/composer.json
Normal file
5
.ci/php-cs-fixer/composer.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"require": {
|
||||
"friendsofphp/php-cs-fixer": "^3.12"
|
||||
}
|
||||
}
|
1842
.ci/php-cs-fixer/composer.lock
generated
Normal file
1842
.ci/php-cs-fixer/composer.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#
|
||||
# render.sh
|
||||
# phpstan.sh
|
||||
# Copyright (c) 2021 james@firefly-iii.org
|
||||
#
|
||||
# This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
@@ -20,7 +20,19 @@
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
[ -d "~/Sites" ] && exit 1;
|
||||
# Install composer packages
|
||||
#composer install --no-scripts --no-ansi
|
||||
|
||||
# build translations.
|
||||
php /sites/FF3/dev/tools/cli.php ff3:json-translations v2
|
||||
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||
|
||||
# enable test .env file.
|
||||
# cp .ci/.env.ci .env
|
||||
|
||||
# clean up php code
|
||||
cd $SCRIPT_DIR/php-cs-fixer
|
||||
composer update --quiet
|
||||
rm -f .php-cs-fixer.cache
|
||||
PHP_CS_FIXER_IGNORE_ENV=true ./vendor/bin/php-cs-fixer fix --config $SCRIPT_DIR/php-cs-fixer/.php-cs-fixer.php --allow-risky=yes
|
||||
cd $SCRIPT_DIR/..
|
||||
|
||||
exit 0
|
42
frontend/build.sh → .ci/phpmd.sh
Executable file → Normal file
42
frontend/build.sh → .ci/phpmd.sh
Executable file → Normal file
@@ -1,8 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#
|
||||
# build.sh
|
||||
# Copyright (c) 2021 james@firefly-iii.org
|
||||
# phpmd.sh
|
||||
# Copyright (c) 2023 james@firefly-iii.org
|
||||
#
|
||||
# This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
#
|
||||
@@ -20,34 +20,18 @@
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
[ -d "~/Sites" ] && exit 1;
|
||||
|
||||
# build translations.
|
||||
php /sites/FF3/dev/tools/cli.php ff3:json-translations v2
|
||||
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||
|
||||
# remove old stuff
|
||||
rm -rf public/
|
||||
rm -rf ../public/fonts
|
||||
rm -rf ../public/images
|
||||
rm -rf ../public/v2/js
|
||||
rm -rf ../public/v2/css
|
||||
mkdir -p public/js
|
||||
mkdir -p public/css
|
||||
cd $SCRIPT_DIR/phpmd
|
||||
composer update --quiet
|
||||
./vendor/bin/phpmd \
|
||||
$SCRIPT_DIR/../app text phpmd.xml \
|
||||
--exclude $SCRIPT_DIR/../app/resources/** \
|
||||
--exclude $SCRIPT_DIR/../app/frontend/** \
|
||||
--exclude $SCRIPT_DIR/../app/public/** \
|
||||
--exclude $SCRIPT_DIR/../app/vendor/** \
|
||||
|
||||
# build new stuff
|
||||
yarn install
|
||||
yarn audit fix
|
||||
yarn upgrade
|
||||
yarn prod
|
||||
cd $SCRIPT_DIR/..
|
||||
|
||||
# yarn watch
|
||||
|
||||
# move to right directory
|
||||
# mv public/js ../public/v2
|
||||
# mv public/css ../public/v2
|
||||
|
||||
# also copy fonts
|
||||
#cp -r fonts ../public/v2/css
|
||||
|
||||
# remove built stuff
|
||||
rm -rf public/
|
||||
exit 0
|
1
.ci/phpmd/.gitignore
vendored
Normal file
1
.ci/phpmd/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
vendor
|
5
.ci/phpmd/composer.json
Normal file
5
.ci/phpmd/composer.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"require-dev": {
|
||||
"phpmd/phpmd": "^2.13"
|
||||
}
|
||||
}
|
1012
.ci/phpmd/composer.lock
generated
Normal file
1012
.ci/phpmd/composer.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
72
.ci/phpmd/phpmd.xml
Normal file
72
.ci/phpmd/phpmd.xml
Normal file
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ phpmd.xml
|
||||
~ Copyright (c) 2023 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/>.
|
||||
-->
|
||||
|
||||
<ruleset name="pcsg-generated-ruleset"
|
||||
xmlns="http://pmd.sf.net/ruleset/1.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
|
||||
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
|
||||
<description>Bla bla</description>
|
||||
|
||||
<!--
|
||||
Commando vanuit firefly directory:
|
||||
phpmd database,app,tests html /gdrive-all/development/phpmd/phpmd.xml > public/report.html
|
||||
-->
|
||||
|
||||
<!-- Import the entire controversial code rule set -->
|
||||
<rule ref="rulesets/controversial.xml">
|
||||
<exclude name="CamelCasePropertyName" />
|
||||
</rule>
|
||||
|
||||
<!-- clean code -->
|
||||
<rule ref="rulesets/codesize.xml" />
|
||||
<rule ref="rulesets/design.xml" />
|
||||
<rule ref="rulesets/naming.xml" />
|
||||
<rule ref="rulesets/unusedcode.xml" />
|
||||
|
||||
<rule ref="rulesets/codesize.xml/CyclomaticComplexity">
|
||||
<properties>
|
||||
<property name="reportLevel" value="5"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="rulesets/codesize.xml/NPathComplexity">
|
||||
<properties>
|
||||
<property name="minimum" value="128"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="rulesets/codesize.xml/ExcessiveMethodLength">
|
||||
<properties>
|
||||
<property name="minimum" value="40"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="rulesets/codesize.xml/ExcessiveParameterList">
|
||||
<properties>
|
||||
<property name="minimum" value="5"/>
|
||||
</properties>
|
||||
</rule>
|
||||
|
||||
<!-- include clean code manually -->
|
||||
<rule ref="rulesets/cleancode.xml/BooleanArgumentFlag" />
|
||||
<rule ref="rulesets/cleancode.xml/ElseExpression" />
|
||||
|
||||
<!-- no this one -->
|
||||
<!--<rule ref="rulesets/cleancode.xml/StaticAccess" />-->
|
||||
</ruleset>
|
@@ -8,26 +8,63 @@ parameters:
|
||||
ignoreErrors:
|
||||
- '#is not allowed to extend#'
|
||||
- '#is neither abstract nor final#'
|
||||
- '#Control structures using switch should not be used\.#'
|
||||
- '#has a nullable return type declaration#'
|
||||
- '#with a nullable type declaration#'
|
||||
- '#with null as default value#'
|
||||
- '#Constructor in [a-zA-Z0-9\\_]+ has parameter \$[a-zA-Z0-9\\_]+ with default value#'
|
||||
- '#is not covariant with PHPDoc type array#'
|
||||
-
|
||||
message: '#Function compact\(\) should not be used.#'
|
||||
message: '#but containers should not be injected#'
|
||||
paths:
|
||||
- ../app/Http/Controllers
|
||||
- ../app/Support/Http/Controllers/RenderPartialViews.php
|
||||
- ../app/Support/Form/FormSupport.php
|
||||
- ../app/Support/Form/CurrencyForm.php
|
||||
- ../app/Support/Form/AccountForm.php
|
||||
- ../app/Support/Authentication/RemoteUserGuard.php
|
||||
-
|
||||
message: '#Control structures using switch should not be used.#'
|
||||
paths:
|
||||
- ../app/Api/V1/Controllers/Data/DestroyController.php
|
||||
- ../app/Console/Commands/Correction/FixAccountTypes.php
|
||||
- ../app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php
|
||||
- ../app/Exceptions/GracefulNotFoundHandler.php
|
||||
- ../app/Generator/Webhook/StandardMessageGenerator.php
|
||||
- ../app/Support/Amount.php
|
||||
- ../app/Support/Navigation.php
|
||||
- ../app/Support/ParseDateString.php
|
||||
- ../app/Support/Search/AccountSearch.php
|
||||
- ../app/Support/Search/OperatorQuerySearch.php
|
||||
- ../app/Support/Twig/General.php
|
||||
- ../app/Transformers/RecurrenceTransformer.php
|
||||
- ../app/Validation/AccountValidator.php
|
||||
- ../app/Validation/RecurrenceValidation.php
|
||||
- ../app/Validation/TransactionValidation.php
|
||||
|
||||
-
|
||||
message: '#Function compact\(\) should not be used#'
|
||||
paths:
|
||||
- ../app/Generator/Report/Account/MonthReportGenerator.php
|
||||
- ../app/Generator/Report/Audit/MonthReportGenerator.php
|
||||
- ../app/Generator/Report/Budget/MonthReportGenerator.php
|
||||
- ../app/Generator/Report/Category/MonthReportGenerator.php
|
||||
- ../app/Generator/Report/Standard/MonthReportGenerator.php
|
||||
- ../app/Generator/Report/Standard/MultiYearReportGenerator.php
|
||||
- ../app/Generator/Report/Standard/YearReportGenerator.php
|
||||
- ../app/Generator/Report/Tag/MonthReportGenerator.php
|
||||
- ../app/Http/Controllers/Account/*.php
|
||||
- ../app/Http/Controllers/Admin/*.php
|
||||
- ../app/Http/Controllers/*.php
|
||||
- ../app/Support/ExpandedForm.php
|
||||
- ../app/Generator/Report
|
||||
- ../app/Support/Form/AccountForm.php
|
||||
- ../app/Support/Form/CurrencyForm.php
|
||||
- ../app/Support/Form/FormSupport.php
|
||||
-
|
||||
message: '#Either catch a more specific exception#'
|
||||
paths:
|
||||
- ../app/Support/Form/FormSupport.php
|
||||
|
||||
paths:
|
||||
- ../app
|
||||
- ../database
|
||||
- ../routes
|
||||
- ../config
|
||||
- ../bootstrap/app.php
|
||||
|
||||
# The level 8 is the highest level. original was 5
|
||||
level: 3
|
||||
level: 4
|
||||
|
||||
|
@@ -23,11 +23,13 @@
|
||||
# Install composer packages
|
||||
#composer install --no-scripts --no-ansi
|
||||
|
||||
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||
|
||||
# enable test .env file.
|
||||
cp .ci/.env.ci .env
|
||||
# cp .ci/.env.ci .env
|
||||
|
||||
# Do static code analysis.
|
||||
# ./vendor/bin/phpstan analyse -c .ci/phpstan.neon --no-progress
|
||||
./vendor/bin/phpstan analyse -c .ci/phpstan.neon
|
||||
./vendor/bin/phpstan analyse -c .ci/phpstan.neon --xdebug --error-format=table > phpstan-report.txt
|
||||
|
||||
exit 0
|
||||
echo 'The PHPstan report can be found in phpstan-report.txt'
|
||||
|
@@ -19,15 +19,45 @@
|
||||
# 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/>.
|
||||
#
|
||||
|
||||
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||
# enable test .env file.
|
||||
cp .ci/.env.ci ../.env
|
||||
cp $SCRIPT_DIR/../.env $SCRIPT_DIR/../.env.backup
|
||||
cp $SCRIPT_DIR/.env.ci $SCRIPT_DIR/../.env
|
||||
|
||||
COVERAGE=false
|
||||
RESET=false
|
||||
FILE=storage/database/database.sqlite
|
||||
|
||||
while getopts "cr" o; do
|
||||
case "${o}" in
|
||||
c) COVERAGE=true;;
|
||||
r) RESET=true;;
|
||||
esac
|
||||
done
|
||||
|
||||
# reset if necessary.
|
||||
if [ $RESET = "true" ] ; then
|
||||
rm -f $FILE
|
||||
fi
|
||||
|
||||
# download test database
|
||||
# TODO no longer exists
|
||||
wget --quiet https://raw.githubusercontent.com/firefly-iii/test-data/main/test_db.sqlite -o storage/database/test_db.sqlite
|
||||
if [ -f "$FILE" ]; then
|
||||
echo 'DB exists, will use it'
|
||||
else
|
||||
echo 'Download new DB'
|
||||
wget --quiet https://github.com/firefly-iii/test-fixtures/raw/main/test-database.sqlite -O $FILE
|
||||
fi
|
||||
|
||||
# run phpunit
|
||||
./vendor/bin/phpunit --configuration phpunit.coverage.xml
|
||||
if [ $COVERAGE = "true" ] ; then
|
||||
echo 'Run with coverage'
|
||||
XDEBUG_MODE=coverage ./vendor/bin/phpunit --configuration phpunit.xml --coverage-html $SCRIPT_DIR/coverage
|
||||
else
|
||||
echo 'Run without coverage'
|
||||
./vendor/bin/phpunit --configuration phpunit.xml
|
||||
fi
|
||||
|
||||
exit 0
|
||||
# restore .env file
|
||||
mv $SCRIPT_DIR/../.env.backup $SCRIPT_DIR/../.env
|
||||
|
||||
cd $SCRIPT_DIR/..
|
||||
|
@@ -1,321 +0,0 @@
|
||||
# You can leave this on "local". If you change it to production most console commands will ask for extra confirmation.
|
||||
# Never set it to "testing".
|
||||
APP_ENV=heroku
|
||||
|
||||
# Set to true if you want to see debug information in error screens.
|
||||
APP_DEBUG=false
|
||||
|
||||
# This should be your email address.
|
||||
# If you use Docker or similar, you can set this variable from a file by using SITE_OWNER_FILE
|
||||
SITE_OWNER=heroku@example.com
|
||||
|
||||
# The encryption key for your sessions. Keep this very secure.
|
||||
# If you generate a new one all existing attachments must be considered LOST.
|
||||
# Change it to a string of exactly 32 chars or use something like `php artisan key:generate` to generate it.
|
||||
# If you use Docker or similar, you can set this variable from a file by using APP_KEY_FILE
|
||||
APP_KEY=7ahyYVPVsmxjdhsweWCauGeJfwc92NP2
|
||||
|
||||
#
|
||||
# Firefly III will launch using this language (for new users and unauthenticated visitors)
|
||||
# For a list of available languages: https://github.com/firefly-iii/firefly-iii/tree/main/resources/lang
|
||||
#
|
||||
# If text is still in English, remember that not everything may have been translated.
|
||||
DEFAULT_LANGUAGE=en_US
|
||||
|
||||
# The locale defines how numbers are formatted.
|
||||
# by default this value is the same as whatever the language is.
|
||||
DEFAULT_LOCALE=equal
|
||||
|
||||
# Change this value to your preferred time zone.
|
||||
# Example: Europe/Amsterdam
|
||||
# For a list of supported time zones, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||
TZ=UTC
|
||||
|
||||
# TRUSTED_PROXIES is a useful variable when using Docker and/or a reverse proxy.
|
||||
# Set it to ** and reverse proxies work just fine.
|
||||
TRUSTED_PROXIES=**
|
||||
|
||||
# The log channel defines where your log entries go to.
|
||||
# Several other options exist. You can use 'single' for one big fat error log (not recommended).
|
||||
# Also available are 'syslog', 'errorlog' and 'stdout' which will log to the system itself.
|
||||
# A rotating log option is 'daily', creates 5 files that (surprise) rotate.
|
||||
# Default setting 'stack' will log to 'daily' and to 'stdout' at the same time.
|
||||
|
||||
# - Docker + versions <= 4.8.1.8 and before: use "stdout"
|
||||
# - Docker + versions > 4.8.1.8 : use "docker_out"
|
||||
# - Docker + versions >= 5.1.1 : use "stack"
|
||||
# - For everything else (als not Docker) : use 'stack'
|
||||
|
||||
LOG_CHANNEL=stdout
|
||||
|
||||
# Log level. You can set this from least severe to most severe:
|
||||
# debug, info, notice, warning, error, critical, alert, emergency
|
||||
# If you set it to debug your logs will grow large, and fast. If you set it to emergency probably
|
||||
# nothing will get logged, ever.
|
||||
APP_LOG_LEVEL=notice
|
||||
|
||||
# Database credentials. Make sure the database exists. I recommend a dedicated user for Firefly III
|
||||
# For other database types, please see the FAQ: https://docs.firefly-iii.org/support/faq
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
# Use "pgsql" for PostgreSQL
|
||||
# Use "mysql" for MySQL and MariaDB.
|
||||
# Use "sqlite" for SQLite.
|
||||
DB_CONNECTION=pgsql
|
||||
|
||||
|
||||
# MySQL supports SSL. You can configure it here.
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
MYSQL_USE_SSL=false
|
||||
MYSQL_SSL_VERIFY_SERVER_CERT=true
|
||||
# You need to set at least of these options
|
||||
MYSQL_SSL_CAPATH=/etc/ssl/certs/
|
||||
MYSQL_SSL_CA=
|
||||
MYSQL_SSL_CERT=
|
||||
MYSQL_SSL_KEY=
|
||||
MYSQL_SSL_CIPHER=
|
||||
|
||||
# PostgreSQL supports SSL. You can configure it here.
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
PGSQL_SSL_MODE=prefer
|
||||
PGSQL_SSL_ROOT_CERT=null
|
||||
PGSQL_SSL_CERT=null
|
||||
PGSQL_SSL_KEY=null
|
||||
PGSQL_SSL_CRL_FILE=null
|
||||
|
||||
# If you're looking for performance improvements, you could install memcached.
|
||||
CACHE_DRIVER=file
|
||||
SESSION_DRIVER=file
|
||||
|
||||
# If you set either of these to 'redis', you might want to update these settings too
|
||||
# If you use Docker or similar, you can set REDIS_HOST_FILE, REDIS_PASSWORD_FILE or
|
||||
# REDIS_PORT_FILE to set the value from a file instead of from an environment variable
|
||||
|
||||
# can be tcp, unix or http
|
||||
REDIS_SCHEME=tcp
|
||||
|
||||
# use only when using 'unix' for REDIS_SCHEME. Leave empty otherwise.
|
||||
REDIS_PATH=
|
||||
|
||||
# use only when using 'tcp' or 'http' for REDIS_SCHEME. Leave empty otherwise.
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PORT=6379
|
||||
|
||||
REDIS_PASSWORD=null
|
||||
# always use quotes and make sure redis db "0" and "1" exists. Otherwise change accordingly.
|
||||
REDIS_DB="0"
|
||||
REDIS_CACHE_DB="1"
|
||||
|
||||
# Cookie settings. Should not be necessary to change these.
|
||||
# If you use Docker or similar, you can set COOKIE_DOMAIN_FILE to set
|
||||
# the value from a file instead of from an environment variable
|
||||
COOKIE_PATH="/"
|
||||
COOKIE_DOMAIN=
|
||||
COOKIE_SECURE=false
|
||||
|
||||
# If you want Firefly III to mail you, update these settings
|
||||
# For instructions, see: https://docs.firefly-iii.org/advanced-installation/email
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
MAIL_MAILER=log
|
||||
MAIL_HOST=null
|
||||
MAIL_PORT=2525
|
||||
MAIL_FROM=changeme@example.com
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
|
||||
# Other mail drivers:
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
MAILGUN_DOMAIN=
|
||||
MAILGUN_SECRET=
|
||||
|
||||
|
||||
# If you are on EU region in mailgun, use api.eu.mailgun.net, otherwise use api.mailgun.net
|
||||
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||
MAILGUN_ENDPOINT=api.mailgun.net
|
||||
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
MANDRILL_SECRET=
|
||||
SPARKPOST_SECRET=
|
||||
|
||||
|
||||
# Firefly III can send you the following messages
|
||||
SEND_REGISTRATION_MAIL=true
|
||||
SEND_ERROR_MESSAGE=true
|
||||
|
||||
# These messages contain (sensitive) transaction information:
|
||||
SEND_REPORT_JOURNALS=true
|
||||
|
||||
# Set a Mapbox API key here (see mapbox.com) so there might be a map available at various places.
|
||||
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||
MAPBOX_API_KEY=
|
||||
|
||||
# The map will default to this location:
|
||||
MAP_DEFAULT_LAT=51.983333
|
||||
MAP_DEFAULT_LONG=5.916667
|
||||
MAP_DEFAULT_ZOOM=6
|
||||
|
||||
# Firefly III currently supports two provider for live Currency Exchange Rates:
|
||||
# "fixer", and "ratesapi".
|
||||
# RatesApi.IO (see https://ratesapi.io) is a FREE and OPEN SOURCE live currency exchange rates,
|
||||
# built compatible with Fixer.IO, based on data published by European Central Bank, and doesn't require API key.
|
||||
CER_PROVIDER=ratesapi
|
||||
|
||||
# If you have select "fixer" as default currency exchange rates,
|
||||
# set a Fixer IO API key here (see https://fixer.io) to enable live currency exchange rates.
|
||||
# Please note that this WILL ONLY WORK FOR PAID fixer.io accounts because they severely limited
|
||||
# the free API up to the point where you might as well offer nothing.
|
||||
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||
FIXER_API_KEY=
|
||||
|
||||
# Firefly III has two options for user authentication. "eloquent" is the default,
|
||||
# and "ldap" for LDAP servers.
|
||||
# For full instructions on these settings please visit:
|
||||
# https://docs.firefly-iii.org/advanced-installation/authentication
|
||||
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||
LOGIN_PROVIDER=eloquent
|
||||
|
||||
#
|
||||
# It's also possible to change the way users are authenticated. You could use Authelia for example.
|
||||
# Authentication via the REMOTE_USER header is supported. Change the value below to "remote_user_guard".
|
||||
#
|
||||
# If you do this please read the documentation for instructions and warnings:
|
||||
# https://docs.firefly-iii.org/advanced-installation/authentication
|
||||
#
|
||||
# This function is available in Firefly III v5.3.0 and higher.
|
||||
AUTHENTICATION_GUARD=web
|
||||
|
||||
#
|
||||
# Likewise, it's impossible to log out users who's authentication is handled by an external system.
|
||||
# Enter a custom URL here that will force a logout (your authentication provider can tell you).
|
||||
# Setting this variable only works when AUTHENTICATION_GUARD != web
|
||||
#
|
||||
CUSTOM_LOGOUT_URL=
|
||||
|
||||
# LDAP connection configuration
|
||||
# OpenLDAP, FreeIPA or ActiveDirectory
|
||||
# # If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||
ADLDAP_CONNECTION_SCHEME=OpenLDAP
|
||||
ADLDAP_AUTO_CONNECT=true
|
||||
|
||||
# LDAP connection settings
|
||||
# You can set the following variables from a file by appending them with _FILE:
|
||||
# ADLDAP_CONTROLLERS, ADLDAP_PORT, ADLDAP_BASEDN
|
||||
ADLDAP_CONTROLLERS=
|
||||
ADLDAP_PORT=389
|
||||
ADLDAP_TIMEOUT=5
|
||||
ADLDAP_BASEDN=""
|
||||
ADLDAP_FOLLOW_REFFERALS=false
|
||||
|
||||
# SSL/TLS settings
|
||||
ADLDAP_USE_SSL=false
|
||||
ADLDAP_USE_TLS=false
|
||||
ADLDAP_SSL_CACERTDIR=
|
||||
ADLDAP_SSL_CACERTFILE=
|
||||
ADLDAP_SSL_CERTFILE=
|
||||
ADLDAP_SSL_KEYFILE=
|
||||
ADLDAP_SSL_CIPHER_SUITE=
|
||||
ADLDAP_SSL_REQUIRE_CERT=
|
||||
|
||||
# You can set the following variables from a file by appending them with _FILE:
|
||||
ADLDAP_ADMIN_USERNAME=
|
||||
ADLDAP_ADMIN_PASSWORD=
|
||||
|
||||
# You can set the following variables from a file by appending them with _FILE:
|
||||
ADLDAP_ACCOUNT_PREFIX=
|
||||
ADLDAP_ACCOUNT_SUFFIX=
|
||||
|
||||
|
||||
# LDAP authentication settings.
|
||||
ADLDAP_PASSWORD_SYNC=false
|
||||
ADLDAP_LOGIN_FALLBACK=false
|
||||
|
||||
ADLDAP_DISCOVER_FIELD=distinguishedname
|
||||
ADLDAP_AUTH_FIELD=distinguishedname
|
||||
|
||||
# Will allow SSO if your server provides an AUTH_USER field.
|
||||
# You can set the following variables from a file by appending them with _FILE:
|
||||
WINDOWS_SSO_ENABLED=false
|
||||
WINDOWS_SSO_DISCOVER=samaccountname
|
||||
WINDOWS_SSO_KEY=AUTH_USER
|
||||
|
||||
# field to sync as local username.
|
||||
# You can set the following variable from a file by appending it with _FILE:
|
||||
ADLDAP_SYNC_FIELD=userprincipalname
|
||||
|
||||
# You can disable the X-Frame-Options header if it interferes with tools like
|
||||
# Organizr. This is at your own risk. Applications running in frames run the risk
|
||||
# of leaking information to their parent frame.
|
||||
DISABLE_FRAME_HEADER=false
|
||||
|
||||
# You can disable the Content Security Policy header when you're using an ancient browser
|
||||
# or any version of Microsoft Edge / Internet Explorer (which amounts to the same thing really)
|
||||
# This leaves you with the risk of not being able to stop XSS bugs should they ever surface.
|
||||
# This is at your own risk.
|
||||
DISABLE_CSP_HEADER=false
|
||||
|
||||
# If you wish to track your own behavior over Firefly III, set valid analytics tracker information here.
|
||||
# Nobody uses this except for me on the demo site. But hey, feel free to use this if you want to.
|
||||
# Do not prepend the TRACKER_URL with http:// or https://
|
||||
# The only tracker supported is Matomo.
|
||||
# You can set the following variables from a file by appending them with _FILE:
|
||||
TRACKER_SITE_ID=
|
||||
TRACKER_URL=
|
||||
|
||||
# You can fine tune the start-up of a Docker container by editing these environment variables.
|
||||
# Use this at your own risk. Disabling certain checks and features may result in lost of inconsistent data.
|
||||
# However if you know what you're doing you can significantly speed up container start times.
|
||||
# Set each value to true to enable, or false to disable.
|
||||
|
||||
# Check if the SQLite database exists. Can be skipped if you're not using SQLite.
|
||||
# Won't significantly speed up things.
|
||||
DKR_CHECK_SQLITE=true
|
||||
|
||||
# Run database creation and migration commands. Disable this only if you're 100% sure the DB exists
|
||||
# and is up to date.
|
||||
DKR_RUN_MIGRATION=true
|
||||
|
||||
# Run database upgrade commands. Disable this only when you're 100% sure your DB is up-to-date
|
||||
# with the latest fixes (outside of migrations!)
|
||||
DKR_RUN_UPGRADE=true
|
||||
|
||||
# Verify database integrity. Includes all data checks and verifications.
|
||||
# Disabling this makes Firefly III assume your DB is intact.
|
||||
DKR_RUN_VERIFY=true
|
||||
|
||||
# Run database reporting commands. When disabled, Firefly III won't go over your data to report current state.
|
||||
# Disabling this should have no impact on data integrity or safety but it won't warn you of possible issues.
|
||||
DKR_RUN_REPORT=true
|
||||
|
||||
# Generate OAuth2 keys.
|
||||
# When disabled, Firefly III won't attempt to generate OAuth2 Passport keys. This won't be an issue, IFF (if and only if)
|
||||
# you had previously generated keys already and they're stored in your database for restoration.
|
||||
DKR_RUN_PASSPORT_INSTALL=true
|
||||
|
||||
# Leave the following configuration vars as is.
|
||||
# Unless you like to tinker and know what you're doing.
|
||||
APP_NAME=FireflyIII
|
||||
ADLDAP_CONNECTION=default
|
||||
BROADCAST_DRIVER=log
|
||||
QUEUE_DRIVER=sync
|
||||
CACHE_PREFIX=firefly
|
||||
SEARCH_RESULT_LIMIT=50
|
||||
PUSHER_KEY=
|
||||
PUSHER_SECRET=
|
||||
PUSHER_ID=
|
||||
DEMO_USERNAME=
|
||||
DEMO_PASSWORD=
|
||||
USE_ENCRYPTION=false
|
||||
IS_HEROKU=false
|
||||
FIREFLY_III_LAYOUT=v1
|
||||
|
||||
#
|
||||
# If you have trouble configuring your Firefly III installation, DON'T BOTHER setting this variable.
|
||||
# It won't work. It doesn't do ANYTHING. Don't believe the lies you read online. I'm not joking.
|
||||
# This configuration value WILL NOT HELP.
|
||||
#
|
||||
# This variable is ONLY used in some of the emails Firefly III sends around. Nowhere else.
|
||||
# So when configuring anything WEB related this variable doesn't do anything. Nothing
|
||||
#
|
||||
# If you're stuck I understand you get desperate but look SOMEWHERE ELSE.
|
||||
#
|
||||
APP_URL=http://localhost
|
@@ -1,23 +0,0 @@
|
||||
bg_BG
|
||||
cs_CZ
|
||||
de_DE
|
||||
el_GR
|
||||
en_GB
|
||||
en_US
|
||||
es_ES
|
||||
fi_FI
|
||||
fr_FR
|
||||
hu_HU
|
||||
it_IT
|
||||
nb_NO
|
||||
nl_NL
|
||||
pl_PL
|
||||
pt_BR
|
||||
pt_PT
|
||||
ro_RO
|
||||
ru_RU
|
||||
sk_SK
|
||||
sv_SE
|
||||
vi_VN
|
||||
zh-hans_CN
|
||||
zh-hant_CN
|
18
.editorconfig
Normal file
18
.editorconfig
Normal file
@@ -0,0 +1,18 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
||||
|
||||
[docker-compose.yml]
|
||||
indent_size = 4
|
122
.env.example
122
.env.example
@@ -7,11 +7,15 @@ APP_DEBUG=false
|
||||
|
||||
# This should be your email address.
|
||||
# If you use Docker or similar, you can set this variable from a file by using SITE_OWNER_FILE
|
||||
# The variable is used in some errors shown to users who aren't admin.
|
||||
SITE_OWNER=mail@example.com
|
||||
|
||||
# The encryption key for your sessions. Keep this very secure.
|
||||
# Change it to a string of exactly 32 chars or use something like `php artisan key:generate` to generate it.
|
||||
# If you use Docker or similar, you can set this variable from a file by using APP_KEY_FILE
|
||||
#
|
||||
# Avoid the "#" character in your APP_KEY, it may break things.
|
||||
#
|
||||
APP_KEY=SomeRandomStringOf32CharsExactly
|
||||
|
||||
# Firefly III will launch using this language (for new users and unauthenticated visitors)
|
||||
@@ -41,12 +45,6 @@ TRUSTED_PROXIES=
|
||||
# Default setting 'stack' will log to 'daily' and to 'stdout' at the same time.
|
||||
LOG_CHANNEL=stack
|
||||
|
||||
#
|
||||
# Used when logging to papertrail:
|
||||
#
|
||||
PAPERTRAIL_HOST=
|
||||
PAPERTRAIL_PORT=
|
||||
|
||||
# Log level. You can set this from least severe to most severe:
|
||||
# debug, info, notice, warning, error, critical, alert, emergency
|
||||
# If you set it to debug your logs will grow large, and fast. If you set it to emergency probably
|
||||
@@ -54,11 +52,33 @@ PAPERTRAIL_PORT=
|
||||
APP_LOG_LEVEL=notice
|
||||
|
||||
# Audit log level.
|
||||
# Set this to "emergency" if you dont want to store audit logs, leave on info otherwise.
|
||||
AUDIT_LOG_LEVEL=info
|
||||
# The audit log is used to log notable Firefly III events on a separate channel.
|
||||
# These log entries may contain sensitive financial information.
|
||||
# The audit log is disabled by default.
|
||||
#
|
||||
# To enable it, set AUDIT_LOG_LEVEL to "info"
|
||||
# To disable it, set AUDIT_LOG_LEVEL to "emergency"
|
||||
AUDIT_LOG_LEVEL=emergency
|
||||
|
||||
#
|
||||
# If you want, you can redirect the audit logs to another channel.
|
||||
# Set 'audit_stdout', 'audit_syslog', 'audit_errorlog' to log to the system itself.
|
||||
# Use audit_daily to log to a rotating file.
|
||||
# Use audit_papertrail to log to papertrail.
|
||||
#
|
||||
# If you do this, the audit logs may be mixed with normal logs because the settings for these channels
|
||||
# are often the same as the settings for the normal logs.
|
||||
AUDIT_LOG_CHANNEL=
|
||||
|
||||
#
|
||||
# Used when logging to papertrail:
|
||||
# Also used when audit logs log to papertrail:
|
||||
#
|
||||
PAPERTRAIL_HOST=
|
||||
PAPERTRAIL_PORT=
|
||||
|
||||
# Database credentials. Make sure the database exists. I recommend a dedicated user for Firefly III
|
||||
# For other database types, please see the FAQ: https://docs.firefly-iii.org/support/faq
|
||||
# For other database types, please see the FAQ: https://docs.firefly-iii.org/firefly-iii/faq/self-hosted/#i-want-to-use-sqlite
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
# Use "pgsql" for PostgreSQL
|
||||
# Use "mysql" for MySQL and MariaDB.
|
||||
@@ -69,6 +89,8 @@ DB_PORT=3306
|
||||
DB_DATABASE=firefly
|
||||
DB_USERNAME=firefly
|
||||
DB_PASSWORD=secret_firefly_password
|
||||
# leave empty or omit when not using a socket connection
|
||||
DB_SOCKET=
|
||||
|
||||
# MySQL supports SSL. You can configure it here.
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
@@ -89,6 +111,9 @@ PGSQL_SSL_CERT=null
|
||||
PGSQL_SSL_KEY=null
|
||||
PGSQL_SSL_CRL_FILE=null
|
||||
|
||||
# more PostgreSQL settings
|
||||
PGSQL_SCHEMA=public
|
||||
|
||||
# If you're looking for performance improvements, you could install memcached or redis
|
||||
CACHE_DRIVER=file
|
||||
SESSION_DRIVER=file
|
||||
@@ -106,7 +131,10 @@ REDIS_PATH=
|
||||
# use only when using 'tcp' or 'http' for REDIS_SCHEME. Leave empty otherwise.
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=null
|
||||
|
||||
# Use only with Redis 6+ with proper ACL set. Leave empty otherwise.
|
||||
REDIS_USERNAME=
|
||||
REDIS_PASSWORD=
|
||||
|
||||
# always use quotes and make sure redis db "0" and "1" exists. Otherwise change accordingly.
|
||||
REDIS_DB="0"
|
||||
@@ -122,7 +150,7 @@ COOKIE_SECURE=false
|
||||
COOKIE_SAMESITE=lax
|
||||
|
||||
# If you want Firefly III to email you, update these settings
|
||||
# For instructions, see: https://docs.firefly-iii.org/advanced-installation/email
|
||||
# For instructions, see: https://docs.firefly-iii.org/firefly-iii/advanced-installation/email/#email
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
MAIL_MAILER=log
|
||||
MAIL_HOST=null
|
||||
@@ -131,13 +159,13 @@ MAIL_FROM=changeme@example.com
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
MAIL_SENDMAIL_COMMAND=
|
||||
|
||||
# Other mail drivers:
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
MAILGUN_DOMAIN=
|
||||
MAILGUN_SECRET=
|
||||
|
||||
|
||||
# If you are on EU region in mailgun, use api.eu.mailgun.net, otherwise use api.mailgun.net
|
||||
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||
MAILGUN_ENDPOINT=api.mailgun.net
|
||||
@@ -147,18 +175,21 @@ MANDRILL_SECRET=
|
||||
SPARKPOST_SECRET=
|
||||
|
||||
# Firefly III can send you the following messages.
|
||||
SEND_REGISTRATION_MAIL=true
|
||||
SEND_ERROR_MESSAGE=true
|
||||
SEND_LOGIN_NEW_IP_WARNING=true
|
||||
|
||||
# These messages contain (sensitive) transaction information:
|
||||
SEND_REPORT_JOURNALS=true
|
||||
|
||||
# Set this value to true if you want to set the location
|
||||
# of certain things, like transactions. Since this involves an external service, it's optional
|
||||
# and disabled by default.
|
||||
# Set this value to true if you want to set the location of certain things, like transactions.
|
||||
# Since this involves an external service, it's optional and disabled by default.
|
||||
ENABLE_EXTERNAL_MAP=false
|
||||
|
||||
# Set this value to true if you want Firefly III to download currency exchange rates
|
||||
# from the internet. These rates are hosted by the creator of Firefly III inside
|
||||
# an Azure Storage Container.
|
||||
# Not all currencies may be available. Rates may be wrong.
|
||||
ENABLE_EXTERNAL_RATES=false
|
||||
|
||||
# The map will default to this location:
|
||||
MAP_DEFAULT_LAT=51.983333
|
||||
MAP_DEFAULT_LONG=5.916667
|
||||
@@ -171,43 +202,29 @@ MAP_DEFAULT_ZOOM=6
|
||||
#
|
||||
# Firefly III supports a few authentication methods:
|
||||
# - 'web' (default, uses built in DB)
|
||||
# - 'ldap'
|
||||
# - 'remote_user_guard' for Authelia etc
|
||||
# Read more about these settings in the documentation.
|
||||
# https://docs.firefly-iii.org/advanced-installation/authentication
|
||||
# https://docs.firefly-iii.org/firefly-iii/advanced-installation/authentication
|
||||
#
|
||||
# LDAP is no longer supported :(
|
||||
#
|
||||
AUTHENTICATION_GUARD=web
|
||||
|
||||
#
|
||||
# LDAP connection settings:
|
||||
#
|
||||
LDAP_HOST=ldap.yourserver.com
|
||||
LDAP_PORT=389
|
||||
LDAP_TIMEOUT=5
|
||||
LDAP_SSL=false
|
||||
LDAP_TLS=false
|
||||
|
||||
LDAP_BASE_DN="o=something,dc=site,dc=com"
|
||||
LDAP_USERNAME="uid=X,ou=,o=,dc=something,dc=com"
|
||||
LDAP_PASSWORD=super_secret
|
||||
|
||||
LDAP_AUTH_FIELD=uid
|
||||
|
||||
#
|
||||
# If you wish to only authenticate users from a specific group, use the
|
||||
# group filter. Leave empty or remove if not in use.
|
||||
#
|
||||
# Example: cn=Administrators,dc=local,dc=com
|
||||
#
|
||||
# The group filter will only be applied after the user is authenticated.
|
||||
#
|
||||
LDAP_GROUP_FILTER=
|
||||
|
||||
#
|
||||
# Remote user guard settings
|
||||
#
|
||||
AUTHENTICATION_GUARD_HEADER=REMOTE_USER
|
||||
AUTHENTICATION_GUARD_EMAIL=
|
||||
|
||||
#
|
||||
# Firefly III generates a basic keypair for your OAuth tokens.
|
||||
# If you want, you can overrule the key with your own (secure) value.
|
||||
# It's also possible to set PASSPORT_PUBLIC_KEY_FILE or PASSPORT_PRIVATE_KEY_FILE
|
||||
# if you're using Docker secrets or similar solutions for secret management
|
||||
#
|
||||
PASSPORT_PRIVATE_KEY=
|
||||
PASSPORT_PUBLIC_KEY=
|
||||
|
||||
#
|
||||
# Extra authentication settings
|
||||
#
|
||||
@@ -240,17 +257,26 @@ ALLOW_WEBHOOKS=false
|
||||
#
|
||||
# The static cron job token can be useful when you use Docker and wish to manage cron jobs.
|
||||
# 1. Set this token to any 32-character value (this is important!).
|
||||
# 2. Use this token in the cron URL instead of a user's command line token.
|
||||
# 2. Use this token in the cron URL instead of a user's command line token that you can find in /profile
|
||||
#
|
||||
# For more info: https://docs.firefly-iii.org/firefly-iii/advanced-installation/cron/
|
||||
#
|
||||
# You can set this variable from a file by appending it with _FILE
|
||||
#
|
||||
STATIC_CRON_TOKEN=
|
||||
|
||||
# You can fine tune the start-up of a Docker container by editing these environment variables.
|
||||
# Use this at your own risk. Disabling certain checks and features may result in lost of inconsistent data.
|
||||
# Use this at your own risk. Disabling certain checks and features may result in lots of inconsistent data.
|
||||
# However if you know what you're doing you can significantly speed up container start times.
|
||||
# Set each value to true to enable, or false to disable.
|
||||
|
||||
# Set this to true to build all locales supported by Firefly III.
|
||||
# This may take quite some time (several minutes) and is generally not recommended.
|
||||
# If you wish to change or alter the list of locales, start your Docker container with
|
||||
# `docker run -v locale.gen:/etc/locale.gen -e DKR_BUILD_LOCALE=true`
|
||||
# and make sure your preferred locales are in your own locale.gen.
|
||||
DKR_BUILD_LOCALE=false
|
||||
|
||||
# Check if the SQLite database exists. Can be skipped if you're not using SQLite.
|
||||
# Won't significantly speed up things.
|
||||
DKR_CHECK_SQLITE=true
|
||||
@@ -279,7 +305,6 @@ DKR_RUN_PASSPORT_INSTALL=true
|
||||
# Leave the following configuration vars as is.
|
||||
# Unless you like to tinker and know what you're doing.
|
||||
APP_NAME=FireflyIII
|
||||
ADLDAP_CONNECTION=default
|
||||
BROADCAST_DRIVER=log
|
||||
QUEUE_DRIVER=sync
|
||||
CACHE_PREFIX=firefly
|
||||
@@ -289,7 +314,6 @@ PUSHER_SECRET=
|
||||
PUSHER_ID=
|
||||
DEMO_USERNAME=
|
||||
DEMO_PASSWORD=
|
||||
IS_HEROKU=false
|
||||
FIREFLY_III_LAYOUT=v1
|
||||
|
||||
#
|
||||
@@ -297,6 +321,8 @@ FIREFLY_III_LAYOUT=v1
|
||||
# It won't work. It doesn't do ANYTHING. Don't believe the lies you read online. I'm not joking.
|
||||
# This configuration value WILL NOT HELP.
|
||||
#
|
||||
# Notable exception to this rule is Synology, which, according to some users, will use APP_URL to rewrite stuff.
|
||||
#
|
||||
# This variable is ONLY used in some of the emails Firefly III sends around. Nowhere else.
|
||||
# So when configuring anything WEB related this variable doesn't do anything. Nothing
|
||||
#
|
||||
|
17
.gitattributes
vendored
17
.gitattributes
vendored
@@ -1,8 +1,11 @@
|
||||
* text=auto
|
||||
*.css linguist-vendored
|
||||
*.scss linguist-vendored
|
||||
*.js linguist-vendored
|
||||
* text=auto eol=lf
|
||||
|
||||
*.blade.php diff=html
|
||||
*.css diff=css
|
||||
*.html diff=html
|
||||
*.md diff=markdown
|
||||
*.php diff=php
|
||||
|
||||
/.github export-ignore
|
||||
CHANGELOG.md export-ignore
|
||||
/tests export-ignore
|
||||
/phpunit.xml export-ignore
|
||||
/.ci export-ignore
|
||||
.styleci.yml export-ignore
|
||||
|
7
.github/.mergify.yml
vendored
7
.github/.mergify.yml
vendored
@@ -1,7 +0,0 @@
|
||||
pull_request_rules:
|
||||
- name: PR on main is never approved.
|
||||
conditions:
|
||||
- base=main
|
||||
actions:
|
||||
close:
|
||||
message: Please reopen this PR on the `develop` branch. Thank you.
|
15
.github/ISSUE_TEMPLATE/bug.yml
vendored
15
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -14,8 +14,9 @@ body:
|
||||
label: I've found a bug and checked that ...
|
||||
description: Make sure that your request fulfills all of the following requirements. If one requirement cannot be satisfied, explain in detail why.
|
||||
options:
|
||||
- label: ... the documentation does not mention anything about my problem
|
||||
- label: ... [the documentation](https://docs.firefly-iii.org/) does not mention anything about my problem
|
||||
- label: ... there are no open or closed issues that are related to my problem
|
||||
- label: ... it's [definitely a Firefly III issue, not me](https://github.com/firefly-iii/firefly-iii/blob/main/.github/its_you_not_me.md)
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
@@ -26,18 +27,18 @@ body:
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected behaviour
|
||||
description: Please describe precisely what you'd expect to happen.
|
||||
label: Debug information
|
||||
description: Please provide the table from the /debug page. Do not add backticks or quotes.
|
||||
placeholder: The output from the /debug page
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Debug information
|
||||
description: Please provide the table from the /debug page
|
||||
placeholder: The output from the /debug page
|
||||
label: Expected behaviour
|
||||
description: Please describe precisely what you'd expect to happen. Be specific.
|
||||
validations:
|
||||
required: true
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
|
10
.github/ISSUE_TEMPLATE/fr.yml
vendored
10
.github/ISSUE_TEMPLATE/fr.yml
vendored
@@ -8,9 +8,9 @@ body:
|
||||
options:
|
||||
- label: I've read the [support guidelines](https://github.com/firefly-iii/firefly-iii/blob/main/.github/support.md)
|
||||
required: true
|
||||
- label: My request is not listed as [a very good idea, but unfortunately...](https://docs.firefly-iii.org/firefly-iii/about-firefly-iii/what-its-not/)
|
||||
- label: My request is not listed as [a very good idea, but unfortunately...](https://docs.firefly-iii.org/firefly-iii/more-information/what-its-not/)
|
||||
required: true
|
||||
- label: I've used [the search](https://github.com/firefly-iii/firefly-iii/issues?q=is%3Aissue) and this has not been discussed before.
|
||||
- label: I've used [the search](https://github.com/firefly-iii/firefly-iii/issues?q=is%3Aissue) and this has not been requested before.
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
@@ -18,9 +18,9 @@ body:
|
||||
label: Description
|
||||
description: Please describe your feature request
|
||||
placeholder: |
|
||||
- I would like Firefly III to do ABC.
|
||||
- What if you would add feature XYZ?
|
||||
- Firefly III doesn't do DEF.
|
||||
- I would like Firefly III to do (thing).
|
||||
- What if you would add feature (feature here)?
|
||||
- Firefly III doesn't do (thing).
|
||||
validations:
|
||||
required: true
|
||||
|
||||
|
29
.github/code_of_conduct.md
vendored
29
.github/code_of_conduct.md
vendored
@@ -2,7 +2,10 @@
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making
|
||||
participation in our project and our community a harassment-free experience for everyone, regardless of age, body size,
|
||||
disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race,
|
||||
religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
@@ -24,23 +27,35 @@ Examples of unacceptable behavior by participants include:
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take
|
||||
appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits,
|
||||
issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any
|
||||
contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the
|
||||
project or its community. Examples of representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed representative at an online or offline
|
||||
event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at james@firefly-iii.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at
|
||||
james@firefly-iii.org. The project team will review and investigate all complaints, and will respond in a way that it
|
||||
deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the
|
||||
reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent
|
||||
repercussions as determined by other members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available
|
||||
at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
|
4
.github/contributing.md
vendored
4
.github/contributing.md
vendored
@@ -1,3 +1,3 @@
|
||||
# [Contributing guidelines](https://docs.firefly-iii.org/other-pages/contributing)
|
||||
# [Contributing guidelines](https://docs.firefly-iii.org/firefly-iii/support/#contributing-code)
|
||||
|
||||
[Contributing guidelines](https://docs.firefly-iii.org/other-pages/contributing)
|
||||
[Contributing guidelines](https://docs.firefly-iii.org/firefly-iii/support/#contributing-code)
|
||||
|
11
.github/dependabot.yml
vendored
11
.github/dependabot.yml
vendored
@@ -5,7 +5,7 @@ updates:
|
||||
- package-ecosystem: "composer"
|
||||
directory: "/" # Location of package manifests
|
||||
target-branch: develop
|
||||
labels: ["bug"]
|
||||
labels: [ "bug" ]
|
||||
versioning-strategy: increase
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
@@ -14,16 +14,15 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
target-branch: develop
|
||||
labels: ["bug"]
|
||||
labels: [ "bug" ]
|
||||
versioning-strategy: increase
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
|
||||
# yarn / JS updates for new frontend
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/frontend"
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
target-branch: develop
|
||||
labels: [ "bug" ]
|
||||
versioning-strategy: increase
|
||||
labels: ["bug"]
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
|
20
.github/its_you_not_me.md
vendored
Normal file
20
.github/its_you_not_me.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
# It's not you, it's me
|
||||
|
||||
Sometimes bugs reported to Firefly III are configuration and system problems on the user's side.
|
||||
|
||||
If you run into any of the following problems, there's a good chance it's not a Firefly III issue, but a configuration
|
||||
issue.
|
||||
|
||||
- ⚠️ Firefly III can't connect to the database when starting or the password is wrong, even though you're sure it's
|
||||
correct.
|
||||
- ⚠️ Errors about a missing `APP_KEY` or other encryption/hash problems
|
||||
- ⚠️ You can't login due to `419` errors (page expired)
|
||||
- ⚠️ Any `500` error when starting Firefly III
|
||||
- ⚠️ Any white page when starting Firefly III
|
||||
- ⚠️ Time-out when starting Firefly III for the first time
|
||||
- ⚠️ Firefly III does not work behind your reverse proxy
|
||||
- ⚠️ You can't connect to the Data Importer due to 404's or authentication issues.
|
||||
|
||||
If you run into an issue like this, please start a [discussion](https://github.com/firefly-iii/firefly-iii/discussions)
|
||||
or chat on [Gitter.im](https://gitter.im/firefly-iii/firefly-iii). There's a good chance it's not a bug but something we
|
||||
can fix rather quickly :+1:
|
63
.github/mergify.yml
vendored
Normal file
63
.github/mergify.yml
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
---
|
||||
pull_request_rules:
|
||||
- name: Close all on main
|
||||
conditions:
|
||||
- base=main
|
||||
- -author~=^dependabot(|-preview)\[bot\]$
|
||||
actions:
|
||||
close:
|
||||
message: Please do not open PR's on the `main` branch, but on the `develop`
|
||||
branch only. Thank you!
|
||||
- name: No translations
|
||||
conditions:
|
||||
- -author~=^dependabot(|-preview)\[bot\]$
|
||||
- base=develop
|
||||
- or:
|
||||
- files~=^resources/lang/bg_BG
|
||||
- files~=^resources/lang/ca_ES
|
||||
- files~=^resources/lang/cs_CZ
|
||||
- files~=^resources/lang/da_DK
|
||||
- files~=^resources/lang/de_DE
|
||||
- files~=^resources/lang/el_GR
|
||||
- files~=^resources/lang/en_GB
|
||||
- files~=^resources/lang/es_ES
|
||||
- files~=^resources/lang/et_EE
|
||||
- files~=^resources/lang/fa_IR
|
||||
- files~=^resources/lang/fi_FI
|
||||
- files~=^resources/lang/fr_FR
|
||||
- files~=^resources/lang/he_IL
|
||||
- files~=^resources/lang/hu_HU
|
||||
- files~=^resources/lang/id_ID
|
||||
- files~=^resources/lang/is_IS
|
||||
- files~=^resources/lang/it_IT
|
||||
- files~=^resources/lang/ja_JP
|
||||
- files~=^resources/lang/ko_KR
|
||||
- files~=^resources/lang/lt_LT
|
||||
- files~=^resources/lang/nb_NO
|
||||
- files~=^resources/lang/nl_NL
|
||||
- files~=^resources/lang/pl_PL
|
||||
- files~=^resources/lang/pt_BR
|
||||
- files~=^resources/lang/pt_PT
|
||||
- files~=^resources/lang/ro_RO
|
||||
- files~=^resources/lang/ru_RU
|
||||
- files~=^resources/lang/si_LK
|
||||
- files~=^resources/lang/sk_SK
|
||||
- files~=^resources/lang/sl_SI
|
||||
- files~=^resources/lang/sr_CS
|
||||
- files~=^resources/lang/sv_SE
|
||||
- files~=^resources/lang/th_TH
|
||||
- files~=^resources/lang/tlh_AA
|
||||
- files~=^resources/lang/tr_TR
|
||||
- files~=^resources/lang/uk_UA
|
||||
- files~=^resources/lang/vi_VN
|
||||
- files~=^resources/lang/zh_CN
|
||||
- files~=^resources/lang/zh_TW
|
||||
actions:
|
||||
comment:
|
||||
message: >
|
||||
Please do not submit translated strings in your PR. If you need new
|
||||
sentences to be translated, add them to the `en_US` language strings.
|
||||
New or changed translations for other languages can be submitted at
|
||||
https://crowdin.com/project/firefly-iii
|
||||
|
||||
Thank you!
|
6
.github/pull_request_template.md
vendored
6
.github/pull_request_template.md
vendored
@@ -11,8 +11,8 @@ Fixes issue # (if relevant)
|
||||
|
||||
Changes in this pull request:
|
||||
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
|
||||
@JC5
|
||||
|
94
.github/security.md
vendored
94
.github/security.md
vendored
@@ -1,53 +1,101 @@
|
||||
# Security Policy
|
||||
|
||||
Firefly III is an application to manage your personal finances. As such, the developer has adopted this security disclosure and response policy to ensure that critical issues are responsibly handled.
|
||||
Firefly III is an application to manage your personal finances. As such, the developer has adopted this security
|
||||
disclosure and response policy to ensure that critical issues are responsibly handled.
|
||||
|
||||
## Supported Versions
|
||||
Only the latest Firefly III release is maintained. Applicable fixes, including security fixes, will not backported to older release branches. Please refer to [releases.md](https://github.com/firefly-iii/firefly-iii/blob/main/releases.md) for details.
|
||||
|
||||
Only the latest Firefly III release is maintained. Applicable fixes, including security fixes, will not backported to
|
||||
older release branches. Please refer to [releases.md](https://github.com/firefly-iii/firefly-iii/blob/main/releases.md)
|
||||
for details.
|
||||
|
||||
## Reporting a Vulnerability - Private Disclosure Process
|
||||
Security is of the highest importance and all security vulnerabilities or suspected security vulnerabilities should be reported to Firefly III privately, to minimize attacks against current users of Firefly III before they are fixed. Vulnerabilities will be investigated and patched on the next patch (or minor) release as soon as possible. This information could be kept entirely internal to the project.
|
||||
|
||||
If you know of a publicly disclosed security vulnerability for Firefly III, please **IMMEDIATELY** contact james@firefly-iii.org to inform the Firefly III developer. You can use my [GPG key](https://keybase.io/jc5) for extra security.
|
||||
Security is of the highest importance and all security vulnerabilities or suspected security vulnerabilities should be
|
||||
reported to Firefly III privately, to minimize attacks against current users of Firefly III before they are fixed.
|
||||
Vulnerabilities will be investigated and patched on the next patch (or minor) release as soon as possible. This
|
||||
information could be kept entirely internal to the project.
|
||||
|
||||
If you know of a publicly disclosed security vulnerability for Firefly III, please **IMMEDIATELY** contact
|
||||
james@firefly-iii.org to inform the Firefly III developer. You can use my [GPG key](https://keybase.io/jc5) for extra
|
||||
security.
|
||||
|
||||
**IMPORTANT: Do not file public issues on GitHub for security vulnerabilities**
|
||||
|
||||
To report a vulnerability or a security-related issue, please email the private address james@firefly-iii.org with the details of the vulnerability. The email will be received by the developer of Firefly III. Emails will be addressed within 3 business days, including a detailed plan to investigate the issue and any potential workarounds to perform in the meantime. Do not report non-security-impacting bugs through this channel. Use [GitHub issues](https://github.com/firefly-iii/firefly-iii/issues/new/choose) instead.
|
||||
To report a vulnerability or a security-related issue, please email the private address james@firefly-iii.org with the
|
||||
details of the vulnerability. The email will be received by the developer of Firefly III. Emails will be addressed
|
||||
within 3 business days, including a detailed plan to investigate the issue and any potential workarounds to perform in
|
||||
the meantime. Do not report non-security-impacting bugs through this channel.
|
||||
Use [GitHub issues](https://github.com/firefly-iii/firefly-iii/issues/new/choose) instead.
|
||||
|
||||
### Proposed Email Content
|
||||
|
||||
Provide a descriptive subject line and in the body of the email include the following information:
|
||||
|
||||
* Basic identity information, such as your name and your affiliation or company.
|
||||
* Detailed steps to reproduce the vulnerability (POC scripts, screenshots, and compressed packet captures are all helpful to us).
|
||||
* Description of the effects of the vulnerability on Firefly III and the related hardware and software configurations, so that the developer can reproduce it.
|
||||
* Detailed steps to reproduce the vulnerability (POC scripts, screenshots, and compressed packet captures are all
|
||||
helpful to us).
|
||||
* Description of the effects of the vulnerability on Firefly III and the related hardware and software configurations,
|
||||
so that the developer can reproduce it.
|
||||
* How the vulnerability affects Firefly III usage and an estimation of the attack surface, if there is one.
|
||||
* List other projects or dependencies that were used in conjunction with Firefly III to produce the vulnerability.
|
||||
|
||||
## When to report a vulnerability
|
||||
|
||||
* When you think Firefly III has a potential security vulnerability.
|
||||
* When you suspect a potential vulnerability but you are unsure that it impacts Firefly III.
|
||||
* When you know of or suspect a potential vulnerability on another project that is used by Firefly III. For example Firefly III has a dependency on Docker, MySQL, etc.
|
||||
|
||||
* When you know of or suspect a potential vulnerability on another project that is used by Firefly III. For example
|
||||
Firefly III has a dependency on Docker, MySQL, etc.
|
||||
|
||||
## Patch, Release, and Disclosure
|
||||
|
||||
The Firefly III developer will respond to vulnerability reports as follows:
|
||||
|
||||
1. The developer will investigate the vulnerability and determine its effects and criticality.
|
||||
2. If the issue is not deemed to be a vulnerability, the developer will follow up with a detailed reason for rejection.
|
||||
3. The developer will initiate a conversation with the reporter within 3 business days.
|
||||
4. If a vulnerability is acknowledged and the timeline for a fix is determined, the developer will work on a plan to communicate with the appropriate community, including identifying mitigating steps that affected users can take to protect themselves until the fix is rolled out.
|
||||
5. The developer will also create a [CVSS](https://www.first.org/cvss/specification-document) using the [CVSS Calculator](https://www.first.org/cvss/calculator/3.0). The developer makes the final call on the calculated CVSS; it is better to move quickly than making the CVSS perfect. Issues may also be reported to [Mitre](https://cve.mitre.org/) using this [scoring calculator](https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator). The CVE will initially be set to private.
|
||||
6. The developer will work on fixing the vulnerability and perform internal testing before preparing to roll out the fix.
|
||||
7. A public disclosure date is negotiated by the Firefly III developer and the bug submitter. We prefer to fully disclose the bug as soon as possible once a user mitigation or patch is available. It is reasonable to delay disclosure when the bug or the fix is not yet fully understood, the solution is not well-tested, or for distributor coordination. The timeframe for disclosure is from immediate (especially if it’s already publicly known) to a few weeks. For a critical vulnerability with a straightforward mitigation, we expect report date to public disclosure date to be on the order of 14 business days. The Firefly III developer holds the final say when setting a public disclosure date.
|
||||
9. Once the fix is confirmed, the developer will patch the vulnerability in the next patch or minor release. Upon release of the patched version of Firefly III, we will follow the **Public Disclosure Process**.
|
||||
|
||||
1. The developer will investigate the vulnerability and determine its effects and criticality.
|
||||
2. If the issue is not deemed to be a vulnerability, the developer will follow up with a detailed reason for rejection.
|
||||
3. The developer will initiate a conversation with the reporter within 3 business days.
|
||||
4. If a vulnerability is acknowledged and the timeline for a fix is determined, the developer will work on a plan to
|
||||
communicate with the appropriate community, including identifying mitigating steps that affected users can take to
|
||||
protect themselves until the fix is rolled out.
|
||||
5. The developer will also create a [CVSS](https://www.first.org/cvss/specification-document) using
|
||||
the [CVSS Calculator](https://www.first.org/cvss/calculator/3.0). The developer makes the final call on the
|
||||
calculated CVSS; it is better to move quickly than making the CVSS perfect. Issues may also be reported
|
||||
to [Mitre](https://cve.mitre.org/) using
|
||||
this [scoring calculator](https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator). The CVE will initially be set to
|
||||
private.
|
||||
6. The developer will work on fixing the vulnerability and perform internal testing before preparing to roll out the
|
||||
fix.
|
||||
7. A public disclosure date is negotiated by the Firefly III developer and the bug submitter. We prefer to fully
|
||||
disclose the bug as soon as possible once a user mitigation or patch is available. It is reasonable to delay
|
||||
disclosure when the bug or the fix is not yet fully understood, the solution is not well-tested, or for distributor
|
||||
coordination. The timeframe for disclosure is from immediate (especially if it’s already publicly known) to a few
|
||||
weeks. For a critical vulnerability with a straightforward mitigation, we expect report date to public disclosure
|
||||
date to be on the order of 14 business days. The Firefly III developer holds the final say when setting a public
|
||||
disclosure date.
|
||||
8. Once the fix is confirmed, the developer will patch the vulnerability in the next patch or minor release. Upon
|
||||
release of the patched version of Firefly III, we will follow the **Public Disclosure Process**.
|
||||
|
||||
### Public Disclosure Process
|
||||
The developer publishes a public [advisory](https://github.com/firefly-iii/firefly-iii/security/advisories) to the Firefly III community via GitHub. In most cases, additional communication via Twitter, reddit and other channels will assist in educating Firefly III users and rolling out the patched release to affected users.
|
||||
|
||||
The develop will also publish any mitigating steps users can take until the fix can be applied to their Firefly III instances.
|
||||
|
||||
The developer publishes a public [advisory](https://github.com/firefly-iii/firefly-iii/security/advisories) to the
|
||||
Firefly III community via GitHub. In most cases, additional communication via Mastodon, Gitter and other channels will
|
||||
assist in educating Firefly III users and rolling out the patched release to affected users.
|
||||
|
||||
The developer will also publish any mitigating steps users can take until the fix can be applied to their Firefly III
|
||||
instances.
|
||||
|
||||
## Confidentiality, integrity and availability
|
||||
We consider vulnerabilities leading to the compromise of data confidentiality, elevation of privilege, or integrity to be our highest priority concerns. Availability, in particular in areas relating to DoS and resource exhaustion, is also a serious security concern. The Firefly III developer takes all vulnerabilities, potential vulnerabilities, and suspected vulnerabilities seriously and will investigate them in an urgent and expeditious manner.
|
||||
|
||||
Note that we do not currently consider the default settings for Firefly III to be secure-by-default. It is necessary for operators to explicitly configure settings, role based access control, and other resource related features in Firefly III to provide a hardened Firefly III environment. We will not act on any security disclosure that relates to a lack of safe defaults. Over time, we will work towards improved safe-by-default configuration, taking into account backwards compatibility.
|
||||
We consider vulnerabilities leading to the compromise of data confidentiality, elevation of privilege, or integrity to
|
||||
be our highest priority concerns. Availability, in particular in areas relating to DoS and resource exhaustion, is also
|
||||
a serious security concern. The Firefly III developer takes all vulnerabilities, potential vulnerabilities, and
|
||||
suspected vulnerabilities seriously and will investigate them in an urgent and expeditious manner.
|
||||
|
||||
Note that we do not currently consider the default settings for Firefly III to be secure-by-default. It is necessary for
|
||||
operators to explicitly configure settings, role based access control, and other resource related features in Firefly
|
||||
III to provide a hardened Firefly III environment. We will not act on any security disclosure that relates to a lack of
|
||||
safe defaults. Over time, we will work towards improved safe-by-default configuration, taking into account backwards
|
||||
compatibility.
|
||||
|
||||
## Credits
|
||||
|
||||
|
5
.github/stale.yml
vendored
5
.github/stale.yml
vendored
@@ -1,11 +1,11 @@
|
||||
# Configuration for probot-stale - https://github.com/probot/stale
|
||||
|
||||
# Number of days of inactivity before an Issue or Pull Request becomes stale
|
||||
daysUntilStale: 7
|
||||
daysUntilStale: 14
|
||||
|
||||
# Number of days of inactivity before a stale Issue or Pull Request is closed.
|
||||
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
|
||||
daysUntilClose: 7
|
||||
daysUntilClose: 14
|
||||
|
||||
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
|
||||
# - "[Status] Maybe Later"
|
||||
@@ -14,6 +14,7 @@ exemptLabels:
|
||||
- feature
|
||||
- bug
|
||||
- announcement
|
||||
- "layout-v3"
|
||||
|
||||
# Set to true to ignore issues in a project (defaults to false)
|
||||
exemptProjects: false
|
||||
|
8
.github/support.md
vendored
8
.github/support.md
vendored
@@ -4,12 +4,13 @@
|
||||
|
||||
## Reporting an issue
|
||||
|
||||
First of all: thank you for reporting a bug instead of ditching the tool altogether. Bugs have a lot of priority!
|
||||
First of all: thank you for reporting a bug instead of ditching the tool altogether. Bugs have a lot of priority!
|
||||
|
||||
1. Open bugs will have open issues, so search for one first.
|
||||
2. If your feature request is already there, vote on it with :+1: or :-1: reactions.
|
||||
3. Do NOT hijack old issues with the bug you found, open your own issue.
|
||||
4. If relevant, take the time and see if the [demo site](https://demo.firefly-iii.org/) is also suffering from your issue.
|
||||
4. If relevant, take the time and see if the [demo site](https://demo.firefly-iii.org/) is also suffering from your
|
||||
issue.
|
||||
5. If relevant, read the [documentation](https://docs.firefly-iii.org/).
|
||||
|
||||
Please follow these guidelines when opening new issues:
|
||||
@@ -25,7 +26,8 @@ Only then [create a new issue](https://github.com/firefly-iii/firefly-iii/issues
|
||||
## Issue closure and abandonment policy
|
||||
|
||||
- Issues can be converted into discussions if it's not a bug or feature request.
|
||||
- Features that won't be implemented will be labelled "wontfix". [This isn't personal](https://docs.firefly-iii.org/firefly-iii/support/features/#ideas-that-wont-be-implemented).
|
||||
- Features that won't be implemented will be labelled "
|
||||
wontfix". [This isn't personal](https://docs.firefly-iii.org/firefly-iii/about-firefly-iii/what-its-not/).
|
||||
- Issues can be closed if they're duplicates of other issues.
|
||||
- Issues can be closed if the answer is in the FAQ.
|
||||
- Issues will be closed automatically after 14 days.
|
||||
|
101
.github/workflows/cleanup.yml
vendored
Normal file
101
.github/workflows/cleanup.yml
vendored
Normal file
@@ -0,0 +1,101 @@
|
||||
# This workflow prunes old workflow runs for an entire repository.
|
||||
|
||||
name: Prune old builds
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
prune:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- name: Prune cancelled/skipped runs
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
github-token: ${{ secrets.GH_ACTIONS_PERSONAL_ACCESS_TOKEN }}
|
||||
script: |
|
||||
const cancelled = await github.rest.actions.listWorkflowRunsForRepo({
|
||||
owner: context.repo.owner,
|
||||
per_page: 100,
|
||||
repo: context.repo.repo,
|
||||
status: 'cancelled',
|
||||
});
|
||||
|
||||
const skipped = await github.rest.actions.listWorkflowRunsForRepo({
|
||||
owner: context.repo.owner,
|
||||
per_page: 100,
|
||||
repo: context.repo.repo,
|
||||
status: 'skipped',
|
||||
});
|
||||
|
||||
for (const response of [cancelled, skipped]) {
|
||||
for (const run of response.data.workflow_runs) {
|
||||
console.log(`Run id ${run.id} of '${run.name}' is a cancelled/skipped run. Deleting...`);
|
||||
await github.rest.actions.deleteWorkflowRun({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: run.id
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
- name: Prune runs older than 3 days
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
github-token: ${{ secrets.GH_ACTIONS_PERSONAL_ACCESS_TOKEN }}
|
||||
script: |
|
||||
const days_to_expiration = 3;
|
||||
const ms_in_day = 86400000;
|
||||
const now = Date.now();
|
||||
const pages = 5;
|
||||
|
||||
// we don't want to prune old runs from test.yml
|
||||
// because we track the duration of runs over time
|
||||
|
||||
const workflows = [
|
||||
'cleanup.yml',
|
||||
'closed-issues.yml',
|
||||
'depsreview.yaml',
|
||||
'laravel.yml',
|
||||
'lock.yml',
|
||||
'qodana.yml',
|
||||
'sonarcloud.yml',
|
||||
'stale.yml'
|
||||
]
|
||||
|
||||
let runs_to_delete = [];
|
||||
|
||||
for (const workflow of workflows) {
|
||||
for (let page = 0; page < pages; page += 1) {
|
||||
let response = await github.rest.actions.listWorkflowRuns({
|
||||
owner: context.repo.owner,
|
||||
page: page,
|
||||
per_page: 100,
|
||||
repo: context.repo.repo,
|
||||
workflow_id: workflow
|
||||
});
|
||||
|
||||
if (response.data.workflow_runs.length > 0) {
|
||||
for (const run of response.data.workflow_runs) {
|
||||
if (now - Date.parse(run.created_at) > ms_in_day * days_to_expiration) {
|
||||
runs_to_delete.push([run.id, run.name]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const run of runs_to_delete) {
|
||||
console.log(`Run id ${run[0]} of '${run[1]}' is older than ${days_to_expiration} days. Deleting...`);
|
||||
try {
|
||||
await github.rest.actions.deleteWorkflowRun({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: run[0]
|
||||
});
|
||||
} catch (error) {
|
||||
// ignore errors
|
||||
}
|
||||
}
|
22
.github/workflows/closed-issues.yml
vendored
Normal file
22
.github/workflows/closed-issues.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
name: "Reply to closed issue"
|
||||
on:
|
||||
issues:
|
||||
types:
|
||||
- closed
|
||||
jobs:
|
||||
auto_comment:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: aws-actions/closed-issue-message@v1
|
||||
with:
|
||||
message: |
|
||||
Hi there! This is an automatic reply. `Share and enjoy`
|
||||
|
||||
This issue is now 🔒 closed. Please be aware that closed issues are **not** watched.
|
||||
|
||||
- If the original bug is not actually fixed, please feel free to open [a new issue](https://github.com/firefly-iii/firefly-iii/issues/new/choose). Please refer to this issue for clarity.
|
||||
- Follow-up questions must be posted in a new [discussion](https://github.com/firefly-iii/firefly-iii/discussions/)
|
||||
- Further replies to this issue will get **no response**.
|
||||
|
||||
Thank you for your contributions.
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
14
.github/workflows/depsreview.yaml
vendored
Normal file
14
.github/workflows/depsreview.yaml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
name: 'Dependency Review'
|
||||
on: [ pull_request ]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
dependency-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 'Checkout Repository'
|
||||
uses: actions/checkout@v3
|
||||
- name: 'Dependency Review'
|
||||
uses: actions/dependency-review-action@v3
|
8
.github/workflows/laravel.yml
vendored
8
.github/workflows/laravel.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Copy .env
|
||||
run: test -f .env || cp .ci/.env.ci .env
|
||||
- name: Prepare dependencies
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
- prepare
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Copy .env
|
||||
run: test -f .env || cp .ci/.env.ci .env
|
||||
- name: Download database
|
||||
@@ -86,7 +86,7 @@ jobs:
|
||||
- prepare
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Copy .env
|
||||
run: test -f .env || cp .ci/.env.ci .env
|
||||
- name: Download database
|
||||
@@ -120,7 +120,7 @@ jobs:
|
||||
- prepare
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Copy .env
|
||||
run: test -f .env || cp .ci/.env.ci .env
|
||||
- name: Download database
|
||||
|
8
.github/workflows/lock.yml
vendored
8
.github/workflows/lock.yml
vendored
@@ -7,9 +7,13 @@ on:
|
||||
|
||||
jobs:
|
||||
lock:
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v2
|
||||
- uses: JC5/lock-threads@main
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
issue-lock-inactive-days: '90'
|
||||
issue-inactive-days: 90
|
||||
pr-inactive-days: 90
|
||||
|
35
.github/workflows/qodana.yml
vendored
Normal file
35
.github/workflows/qodana.yml
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
name: Qodana
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- develop
|
||||
jobs:
|
||||
qodana:
|
||||
runs-on: ubuntu-latest
|
||||
name: 'Qodana Scan'
|
||||
steps:
|
||||
- name: Setup PHP with no coverage driver
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.2'
|
||||
coverage: none
|
||||
extensions: bcmath, intl
|
||||
env:
|
||||
update: true
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer install --no-scripts
|
||||
cp .env.example .env
|
||||
php artisan key:generate
|
||||
php artisan clear-compiled
|
||||
php artisan ide-helper:generate;
|
||||
|
||||
- name: 'Qodana Scan'
|
||||
uses: JetBrains/qodana-action@main
|
||||
env:
|
||||
QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}
|
47
.github/workflows/sonarcloud.yml
vendored
Normal file
47
.github/workflows/sonarcloud.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
name: Sonarcloud
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- develop
|
||||
jobs:
|
||||
sonarcloud:
|
||||
name: SonarCloud
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup PHP with Xdebug
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.2'
|
||||
coverage: xdebug
|
||||
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --prefer-dist --no-interaction --no-progress --no-scripts
|
||||
|
||||
- name: Copy environment file
|
||||
run: cp .env.example .env
|
||||
|
||||
- name: Generate app key
|
||||
run: php artisan key:generate
|
||||
|
||||
- name: "Run tests with coverage"
|
||||
run: composer coverage
|
||||
|
||||
- name: Fix code coverage paths
|
||||
run: sed -i 's@'$GITHUB_WORKSPACE'@/github/workspace/@g' coverage.xml
|
||||
|
||||
- name: SonarCloud Scan
|
||||
uses: SonarSource/sonarcloud-github-action@master
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GH_ACTIONS_PERSONAL_ACCESS_TOKEN }}
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
27
.github/workflows/stale.yml
vendored
27
.github/workflows/stale.yml
vendored
@@ -2,22 +2,33 @@ name: "Close stale issues"
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 1 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
permissions:
|
||||
issues: write # for actions/stale to close stale issues
|
||||
pull-requests: write # for actions/stale to close stale PRs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v3
|
||||
- uses: actions/stale@v6
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
stale-issue-message: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
Hi there! This is an automatic reply. `Share and enjoy`
|
||||
|
||||
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
|
||||
|
||||
Thank you for your contributions.
|
||||
stale-pr-message: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
Hi there! This is an automatic reply. `Share and enjoy`
|
||||
|
||||
This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
|
||||
|
||||
Thank you for your contributions.
|
||||
days-before-stale: 14
|
||||
days-before-close: 7
|
||||
exempt-issue-labels: 'enhancement,feature,bug,announcement'
|
||||
exempt-issue-labels: 'enhancement,feature,bug,announcement,epic'
|
||||
|
12
.gitignore
vendored
12
.gitignore
vendored
@@ -1,18 +1,10 @@
|
||||
/node_modules
|
||||
/frontend/node_modules
|
||||
/frontend/fonts
|
||||
/frontend/images
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/vendor
|
||||
/.vagrant
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
.env
|
||||
public/google*.html
|
||||
report.html
|
||||
composer.phar
|
||||
app.js.map
|
||||
/.ci/php-cs-fixer/vendor
|
||||
coverage.xml
|
||||
|
@@ -1,58 +0,0 @@
|
||||
---
|
||||
build:
|
||||
nodes:
|
||||
analysis:
|
||||
project_setup:
|
||||
override: true
|
||||
tests:
|
||||
override:
|
||||
- php-scrutinizer-run
|
||||
checks:
|
||||
javascript: true
|
||||
php:
|
||||
align_assignments: true
|
||||
avoid_fixme_comments: true
|
||||
avoid_multiple_statements_on_same_line: true
|
||||
avoid_perl_style_comments: true
|
||||
avoid_todo_comments: true
|
||||
duplication: false
|
||||
encourage_single_quotes: true
|
||||
newline_at_end_of_file: true
|
||||
no_goto: true
|
||||
no_long_variable_names:
|
||||
maximum: "20"
|
||||
no_short_method_names:
|
||||
minimum: "3"
|
||||
no_short_variable_names:
|
||||
minimum: "3"
|
||||
optional_parameters_at_the_end: true
|
||||
parameter_doc_comments: true
|
||||
remove_extra_empty_lines: true
|
||||
return_doc_comment_if_not_inferrable: true
|
||||
return_doc_comments: true
|
||||
uppercase_constants: true
|
||||
use_self_instead_of_fqcn: true
|
||||
coding_style:
|
||||
php:
|
||||
spaces:
|
||||
around_operators:
|
||||
concatenation: true
|
||||
other:
|
||||
after_type_cast: false
|
||||
filter:
|
||||
excluded_paths:
|
||||
- database/migrations/*
|
||||
- bootstrap/*
|
||||
- config/*
|
||||
- docker/*
|
||||
- public/js/lib/*
|
||||
- public/lib/adminlte/js/*
|
||||
- public/lib/bootstrap/js/*
|
||||
- resources/*
|
||||
- routes/*
|
||||
- storage/*
|
||||
paths:
|
||||
- app/*
|
||||
- public/js/ff/*
|
||||
tools:
|
||||
external_code_coverage: false
|
20
.travis.yml
20
.travis.yml
@@ -1,20 +0,0 @@
|
||||
language: php
|
||||
php:
|
||||
- '7.4'
|
||||
dist: xenial
|
||||
os: linux
|
||||
cache:
|
||||
directories:
|
||||
- "/home/travis/.config"
|
||||
- "/home/travis/build/firefly-iii/firefly-iii/vendor"
|
||||
|
||||
branches:
|
||||
only:
|
||||
- develop
|
||||
|
||||
before_script:
|
||||
- phpenv config-rm xdebug.ini || return 0
|
||||
|
||||
script:
|
||||
- "./.ci/phpstan.sh"
|
||||
- "./.ci/phpunit.sh"
|
65
app.json
65
app.json
@@ -1,65 +0,0 @@
|
||||
{
|
||||
"name": "Firefly III",
|
||||
"description": "A free and open source personal finances manager",
|
||||
"repository": "https://github.com/firefly-iii/firefly-iii",
|
||||
"website": "https://firefly-iii.org/",
|
||||
"logo": "https://raw.githubusercontent.com/firefly-iii/firefly-iii/main/public/mstile-150x150.png",
|
||||
"keywords": [
|
||||
"finance",
|
||||
"finances",
|
||||
"manager",
|
||||
"management",
|
||||
"euro",
|
||||
"dollar",
|
||||
"laravel",
|
||||
"money",
|
||||
"currency",
|
||||
"financials",
|
||||
"financial",
|
||||
"budgets",
|
||||
"administration",
|
||||
"tool",
|
||||
"tooling",
|
||||
"help",
|
||||
"helper",
|
||||
"assistant",
|
||||
"planning",
|
||||
"organizing",
|
||||
"bills",
|
||||
"personal finance",
|
||||
"budgets",
|
||||
"budgeting",
|
||||
"budgeting tool",
|
||||
"budgeting application",
|
||||
"transactions",
|
||||
"self hosted",
|
||||
"self-hosted",
|
||||
"transfers",
|
||||
"management"
|
||||
],
|
||||
"addons": [
|
||||
{
|
||||
"plan": "heroku-postgresql",
|
||||
"options": {
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"scripts": {
|
||||
"postdeploy": "php artisan migrate:refresh --seed;php artisan firefly:instructions install"
|
||||
},
|
||||
"buildpacks": [
|
||||
{
|
||||
"url": "heroku/php"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/heroku/heroku-buildpack-locale"
|
||||
}
|
||||
],
|
||||
"env": {
|
||||
"APP_KEY": {
|
||||
"description": "This key is used to create app cookies en secure attachments.",
|
||||
"value": "base64:If1gJN4pyycXTq+WS5TjneDympKuu+8SKvTl6RZnhJg="
|
||||
}
|
||||
}
|
||||
}
|
@@ -65,13 +65,14 @@ class AccountController extends Controller
|
||||
|
||||
/**
|
||||
* Documentation for this endpoint:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getAccountsAC
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getAccountsAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @throws JsonException
|
||||
* @throws FireflyException
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function accounts(AutocompleteRequest $request): JsonResponse
|
||||
{
|
||||
@@ -80,8 +81,9 @@ class AccountController extends Controller
|
||||
$query = $data['query'];
|
||||
$date = $data['date'] ?? today(config('app.timezone'));
|
||||
|
||||
$return = [];
|
||||
$result = $this->repository->searchAccount((string)$query, $types, $data['limit']);
|
||||
$return = [];
|
||||
$result = $this->repository->searchAccount((string)$query, $types, $data['limit']);
|
||||
// TODO this code is duplicated in the V2 Autocomplete controller, which means this code is due to be deprecated.
|
||||
$defaultCurrency = app('amount')->getDefaultCurrency();
|
||||
|
||||
/** @var Account $account */
|
||||
@@ -91,7 +93,11 @@ class AccountController extends Controller
|
||||
|
||||
if (in_array($account->accountType->type, $this->balanceTypes, true)) {
|
||||
$balance = app('steam')->balance($account, $date);
|
||||
$nameWithBalance = sprintf('%s (%s)', $account->name, app('amount')->formatAnything($currency, $balance, false));
|
||||
$nameWithBalance = sprintf(
|
||||
'%s (%s)',
|
||||
$account->name,
|
||||
app('amount')->formatAnything($currency, $balance, false)
|
||||
);
|
||||
}
|
||||
|
||||
$return[] = [
|
||||
@@ -108,14 +114,15 @@ class AccountController extends Controller
|
||||
}
|
||||
|
||||
// custom order.
|
||||
$order = [AccountType::ASSET, AccountType::REVENUE, AccountType::EXPENSE];
|
||||
usort(
|
||||
$return, function ($a, $b) use ($order) {
|
||||
$pos_a = array_search($a['type'], $order);
|
||||
$pos_b = array_search($b['type'], $order);
|
||||
$return,
|
||||
function ($a, $b) {
|
||||
$order = [AccountType::ASSET, AccountType::REVENUE, AccountType::EXPENSE];
|
||||
$posA = array_search($a['type'], $order, true);
|
||||
$posB = array_search($b['type'], $order, true);
|
||||
|
||||
return $pos_a - $pos_b;
|
||||
}
|
||||
return $posA - $posB;
|
||||
}
|
||||
);
|
||||
|
||||
return response()->json($return);
|
||||
|
@@ -57,7 +57,8 @@ class BillController extends Controller
|
||||
|
||||
/**
|
||||
* Documentation for this endpoint is at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getBillsAC
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBillsAC
|
||||
* TODO expand API to add active field.
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
@@ -70,13 +71,13 @@ class BillController extends Controller
|
||||
$filtered = $result->map(
|
||||
static function (Bill $item) {
|
||||
return [
|
||||
'id' => (string)$item->id,
|
||||
'name' => $item->name,
|
||||
'id' => (string)$item->id,
|
||||
'name' => $item->name,
|
||||
'active' => $item->active,
|
||||
];
|
||||
}
|
||||
);
|
||||
|
||||
return response()->json($filtered->toArray());
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -57,7 +57,7 @@ class BudgetController extends Controller
|
||||
|
||||
/**
|
||||
* Documentation for this endpoint is at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getBudgetsAC
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBudgetsAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
|
@@ -57,7 +57,7 @@ class CategoryController extends Controller
|
||||
|
||||
/**
|
||||
* Documentation for this endpoint is at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getCategoriesAC
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCategoriesAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
|
@@ -57,7 +57,7 @@ class CurrencyController extends Controller
|
||||
|
||||
/**
|
||||
* Documentation for this endpoint is at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getCurrenciesAC
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCurrenciesAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
@@ -85,7 +85,7 @@ class CurrencyController extends Controller
|
||||
|
||||
/**
|
||||
* Documentation for this endpoint is at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getCurrenciesCodeAC
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCurrenciesCodeAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
|
@@ -57,7 +57,7 @@ class ObjectGroupController extends Controller
|
||||
|
||||
/**
|
||||
* Documentation for this endpoint is at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getObjectGroupsAC
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getObjectGroupsAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
@@ -80,5 +80,4 @@ class ObjectGroupController extends Controller
|
||||
|
||||
return response()->json($return);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -61,7 +61,7 @@ class PiggyBankController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getPiggiesAC
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getPiggiesAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
@@ -76,15 +76,18 @@ class PiggyBankController extends Controller
|
||||
|
||||
/** @var PiggyBank $piggy */
|
||||
foreach ($piggies as $piggy) {
|
||||
$currency = $this->accountRepository->getAccountCurrency($piggy->account) ?? $defaultCurrency;
|
||||
$response[] = [
|
||||
$currency = $this->accountRepository->getAccountCurrency($piggy->account) ?? $defaultCurrency;
|
||||
$objectGroup = $piggy->objectGroups()->first();
|
||||
$response[] = [
|
||||
'id' => (string)$piggy->id,
|
||||
'name' => $piggy->name,
|
||||
'currency_id' => $currency->id,
|
||||
'currency_id' => (string)$currency->id,
|
||||
'currency_name' => $currency->name,
|
||||
'currency_code' => $currency->code,
|
||||
'currency_symbol' => $currency->symbol,
|
||||
'currency_decimal_places' => $currency->decimal_places,
|
||||
'object_group_id' => null === $objectGroup ? null : (string)$objectGroup->id,
|
||||
'object_group_title' => $objectGroup?->title,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -93,7 +96,7 @@ class PiggyBankController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getPiggiesBalanceAC
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getPiggiesBalanceAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
@@ -109,22 +112,26 @@ class PiggyBankController extends Controller
|
||||
foreach ($piggies as $piggy) {
|
||||
$currency = $this->accountRepository->getAccountCurrency($piggy->account) ?? $defaultCurrency;
|
||||
$currentAmount = $this->piggyRepository->getRepetition($piggy)->currentamount ?? '0';
|
||||
$objectGroup = $piggy->objectGroups()->first();
|
||||
$response[] = [
|
||||
'id' => (string)$piggy->id,
|
||||
'name' => $piggy->name,
|
||||
'name_with_balance' => sprintf(
|
||||
'%s (%s / %s)', $piggy->name, app('amount')->formatAnything($currency, $currentAmount, false),
|
||||
'%s (%s / %s)',
|
||||
$piggy->name,
|
||||
app('amount')->formatAnything($currency, $currentAmount, false),
|
||||
app('amount')->formatAnything($currency, $piggy->targetamount, false),
|
||||
),
|
||||
'currency_id' => $currency->id,
|
||||
'currency_id' => (string)$currency->id,
|
||||
'currency_name' => $currency->name,
|
||||
'currency_code' => $currency->code,
|
||||
'currency_symbol' => $currency->symbol,
|
||||
'currency_decimal_places' => $currency->decimal_places,
|
||||
'object_group_id' => null === $objectGroup ? null : (string)$objectGroup->id,
|
||||
'object_group_title' => $objectGroup?->title,
|
||||
];
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -45,6 +45,7 @@ class RecurrenceController extends Controller
|
||||
$this->middleware(
|
||||
function ($request, $next) {
|
||||
$this->repository = app(RecurringRepositoryInterface::class);
|
||||
|
||||
$this->repository->setUser(auth()->user());
|
||||
|
||||
return $next($request);
|
||||
@@ -54,7 +55,7 @@ class RecurrenceController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getRecurringAC
|
||||
* * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getRecurringAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
@@ -77,5 +78,4 @@ class RecurrenceController extends Controller
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -54,7 +54,7 @@ class RuleController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getRulesAC
|
||||
* * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getRulesAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
@@ -77,5 +77,4 @@ class RuleController extends Controller
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -54,7 +54,7 @@ class RuleGroupController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getRuleGroupsAC
|
||||
* * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getRuleGroupsAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
|
@@ -57,7 +57,7 @@ class TagController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getTagAC
|
||||
* * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTagAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
|
@@ -62,7 +62,7 @@ class TransactionController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getTransactionsAC
|
||||
* * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTransactionsAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
@@ -92,7 +92,7 @@ class TransactionController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getTransactionsIDAC
|
||||
* * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTransactionsIDAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
@@ -101,7 +101,7 @@ class TransactionController extends Controller
|
||||
public function transactionsWithID(AutocompleteRequest $request): JsonResponse
|
||||
{
|
||||
$data = $request->getData();
|
||||
$result = new Collection;
|
||||
$result = new Collection();
|
||||
if (is_numeric($data['query'])) {
|
||||
// search for group, not journal.
|
||||
$firstResult = $this->groupRepository->find((int)$data['query']);
|
||||
|
@@ -53,12 +53,11 @@ class TransactionTypeController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at
|
||||
* https://api-docs.firefly-iii.org/#/autocomplete/getTransactionTypesAC
|
||||
* * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTransactionTypesAC
|
||||
*
|
||||
* @param AutocompleteRequest $request
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function transactionTypes(AutocompleteRequest $request): JsonResponse
|
||||
{
|
||||
|
@@ -35,6 +35,9 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||
use FireflyIII\Support\Http\Api\ApiSupport;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use JsonException;
|
||||
use Psr\Container\ContainerExceptionInterface;
|
||||
use Psr\Container\NotFoundExceptionInterface;
|
||||
|
||||
/**
|
||||
* Class AccountController
|
||||
@@ -49,7 +52,7 @@ class AccountController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -71,12 +74,15 @@ class AccountController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/charts/getChartAccountOverview
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/charts/getChartAccountOverview
|
||||
*
|
||||
* @param DateRequest $request
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @throws JsonException
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function overview(DateRequest $request): JsonResponse
|
||||
{
|
||||
@@ -92,7 +98,7 @@ class AccountController extends Controller
|
||||
$frontPage = app('preferences')->get('frontPageAccounts', $defaultSet);
|
||||
$default = app('amount')->getDefaultCurrency();
|
||||
|
||||
if (empty($frontPage->data)) {
|
||||
if (!(is_array($frontPage->data) && count($frontPage->data) > 0)) {
|
||||
$frontPage->data = $defaultSet;
|
||||
$frontPage->save();
|
||||
}
|
||||
@@ -107,7 +113,7 @@ class AccountController extends Controller
|
||||
if (null === $currency) {
|
||||
$currency = $default;
|
||||
}
|
||||
$currentSet = [
|
||||
$currentSet = [
|
||||
'label' => $account->name,
|
||||
'currency_id' => (string)$currency->id,
|
||||
'currency_code' => $currency->code,
|
||||
@@ -119,13 +125,15 @@ class AccountController extends Controller
|
||||
'yAxisID' => 0, // 0, 1, 2
|
||||
'entries' => [],
|
||||
];
|
||||
// TODO this code is also present in the V2 chart account controller so this method is due to be deprecated.
|
||||
$currentStart = clone $start;
|
||||
$range = app('steam')->balanceInRange($account, $start, clone $end);
|
||||
$previous = round((float)array_values($range)[0], 12);
|
||||
// 2022-10-11 this method no longer converts to float.
|
||||
$previous = array_values($range)[0];
|
||||
while ($currentStart <= $end) {
|
||||
$format = $currentStart->format('Y-m-d');
|
||||
$label = $currentStart->toAtomString();
|
||||
$balance = array_key_exists($format, $range) ? round((float)$range[$format], 12) : $previous;
|
||||
$balance = array_key_exists($format, $range) ? $range[$format] : $previous;
|
||||
$previous = $balance;
|
||||
$currentStart->addDay();
|
||||
$currentSet['entries'][$label] = $balance;
|
||||
|
@@ -31,19 +31,24 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use League\Fractal\Manager;
|
||||
use League\Fractal\Serializer\JsonApiSerializer;
|
||||
use Log;
|
||||
use Psr\Container\ContainerExceptionInterface;
|
||||
use Psr\Container\NotFoundExceptionInterface;
|
||||
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
|
||||
use Symfony\Component\HttpFoundation\ParameterBag;
|
||||
|
||||
/**
|
||||
* Class Controller.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
abstract class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
use AuthorizesRequests;
|
||||
use DispatchesJobs;
|
||||
use ValidatesRequests;
|
||||
|
||||
protected const CONTENT_TYPE = 'application/vnd.api+json';
|
||||
protected array $allowedSort;
|
||||
@@ -67,34 +72,52 @@ abstract class Controller extends BaseController
|
||||
return $next($request);
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to grab all parameters from the URI.
|
||||
* Method to grab all parameters from the URL.
|
||||
*
|
||||
* @return ParameterBag
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
private function getParameters(): ParameterBag
|
||||
{
|
||||
$bag = new ParameterBag;
|
||||
$bag = new ParameterBag();
|
||||
$page = (int)request()->get('page');
|
||||
if (0 === $page) {
|
||||
if ($page < 1) {
|
||||
$page = 1;
|
||||
}
|
||||
if ($page > pow(2, 16)) {
|
||||
$page = pow(2, 16);
|
||||
}
|
||||
$bag->set('page', $page);
|
||||
|
||||
// some date fields:
|
||||
$dates = ['start', 'end', 'date'];
|
||||
foreach ($dates as $field) {
|
||||
$date = request()->query->get($field);
|
||||
$obj = null;
|
||||
$date = null;
|
||||
try {
|
||||
$date = request()->query->get($field);
|
||||
} catch (BadRequestException $e) {
|
||||
Log::error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $field));
|
||||
Log::error($e->getMessage());
|
||||
Log::error($e->getTraceAsString());
|
||||
$value = null;
|
||||
}
|
||||
$obj = null;
|
||||
if (null !== $date) {
|
||||
try {
|
||||
$obj = Carbon::parse($date);
|
||||
} catch (InvalidDateException | InvalidFormatException $e) {
|
||||
// don't care
|
||||
Log::error(sprintf('Invalid date exception in API controller: %s', $e->getMessage()));
|
||||
app('log')->warning(
|
||||
sprintf(
|
||||
'Ignored invalid date "%s" in API controller parameter check: %s',
|
||||
substr($date, 0, 20),
|
||||
$e->getMessage()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
$bag->set($field, $obj);
|
||||
@@ -103,7 +126,14 @@ abstract class Controller extends BaseController
|
||||
// integer fields:
|
||||
$integers = ['limit'];
|
||||
foreach ($integers as $integer) {
|
||||
$value = request()->query->get($integer);
|
||||
try {
|
||||
$value = request()->query->get($integer);
|
||||
} catch (BadRequestException $e) {
|
||||
Log::error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $integer));
|
||||
Log::error($e->getMessage());
|
||||
Log::error($e->getTraceAsString());
|
||||
$value = null;
|
||||
}
|
||||
if (null !== $value) {
|
||||
$bag->set($integer, (int)$value);
|
||||
}
|
||||
@@ -121,7 +151,14 @@ abstract class Controller extends BaseController
|
||||
private function getSortParameters(ParameterBag $bag): ParameterBag
|
||||
{
|
||||
$sortParameters = [];
|
||||
$param = (string)request()->query->get('sort');
|
||||
try {
|
||||
$param = (string)request()->query->get('sort');
|
||||
} catch (BadRequestException $e) {
|
||||
Log::error('Request field "sort" contains a non-scalar value. Value set to NULL.');
|
||||
Log::error($e->getMessage());
|
||||
Log::error($e->getTraceAsString());
|
||||
$param = '';
|
||||
}
|
||||
if ('' === $param) {
|
||||
return $bag;
|
||||
}
|
||||
@@ -142,9 +179,8 @@ abstract class Controller extends BaseController
|
||||
return $bag;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Method to help build URI's.
|
||||
* Method to help build URL's.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
@@ -172,7 +208,7 @@ abstract class Controller extends BaseController
|
||||
final protected function getManager(): Manager
|
||||
{
|
||||
// create some objects:
|
||||
$manager = new Manager;
|
||||
$manager = new Manager();
|
||||
$baseUrl = request()->getSchemeAndHttpHost() . '/api/v1';
|
||||
$manager->setSerializer(new JsonApiSerializer($baseUrl));
|
||||
|
||||
|
@@ -1,81 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* AccountController.php
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Api\V1\Controllers\Data\Bulk;
|
||||
|
||||
|
||||
use FireflyIII\Api\V1\Controllers\Controller;
|
||||
use FireflyIII\Api\V1\Requests\Data\Bulk\MoveTransactionsRequest;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Services\Internal\Destroy\AccountDestroyService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
/**
|
||||
* Class AccountController
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
class AccountController extends Controller
|
||||
{
|
||||
private AccountRepositoryInterface $repository;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->middleware(
|
||||
function ($request, $next) {
|
||||
$this->repository = app(AccountRepositoryInterface::class);
|
||||
$this->repository->setUser(auth()->user());
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* This endpoint is deprecated and not documented.
|
||||
*
|
||||
* @param MoveTransactionsRequest $request
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @deprecated
|
||||
*/
|
||||
public function moveTransactions(MoveTransactionsRequest $request): JsonResponse
|
||||
{
|
||||
$accountIds = $request->getAll();
|
||||
$original = $this->repository->find($accountIds['original_account']);
|
||||
$destination = $this->repository->find($accountIds['destination_account']);
|
||||
|
||||
/** @var AccountDestroyService $service */
|
||||
$service = app(AccountDestroyService::class);
|
||||
$service->moveTransactions($original, $destination);
|
||||
|
||||
return response()->json([], 204);
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -62,6 +62,7 @@ class TransactionController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/bulkUpdateTransactions
|
||||
*
|
||||
* @param TransactionRequest $request
|
||||
*
|
||||
@@ -96,5 +97,4 @@ class TransactionController extends Controller
|
||||
{
|
||||
return array_key_exists('account_id', $params['where']) && array_key_exists('account_id', $params['update']);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -45,15 +45,18 @@ use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
||||
use FireflyIII\Services\Internal\Destroy\AccountDestroyService;
|
||||
use FireflyIII\Services\Internal\Destroy\JournalDestroyService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
/**
|
||||
* Class DestroyController
|
||||
*/
|
||||
class DestroyController extends Controller
|
||||
{
|
||||
private bool $unused;
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/data/destroyData
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/destroyData
|
||||
*
|
||||
* @param DestroyRequest $request
|
||||
*
|
||||
@@ -62,11 +65,11 @@ class DestroyController extends Controller
|
||||
*/
|
||||
public function destroy(DestroyRequest $request): JsonResponse
|
||||
{
|
||||
$objects = $request->getObjects();
|
||||
|
||||
$objects = $request->getObjects();
|
||||
$this->unused = $request->boolean('unused', false);
|
||||
switch ($objects) {
|
||||
default:
|
||||
throw new FireflyException(sprintf('This endpoint can\'t handle object "%s"', $objects));
|
||||
throw new FireflyException(sprintf('200033: This endpoint can\'t handle object "%s"', $objects));
|
||||
case 'budgets':
|
||||
$this->destroyBudgets();
|
||||
break;
|
||||
@@ -91,27 +94,55 @@ class DestroyController extends Controller
|
||||
case 'object_groups':
|
||||
$this->destroyObjectGroups();
|
||||
break;
|
||||
case 'not_assets_liabilities':
|
||||
$this->destroyAccounts(
|
||||
[
|
||||
AccountType::BENEFICIARY,
|
||||
AccountType::CASH,
|
||||
AccountType::CREDITCARD,
|
||||
AccountType::DEFAULT,
|
||||
AccountType::EXPENSE,
|
||||
AccountType::IMPORT,
|
||||
AccountType::INITIAL_BALANCE,
|
||||
AccountType::LIABILITY_CREDIT,
|
||||
AccountType::RECONCILIATION,
|
||||
AccountType::REVENUE,
|
||||
]
|
||||
);
|
||||
break;
|
||||
case 'accounts':
|
||||
$this->destroyAccounts(
|
||||
[
|
||||
AccountType::ASSET, AccountType::DEFAULT,
|
||||
AccountType::BENEFICIARY, AccountType::EXPENSE,
|
||||
AccountType::REVENUE, AccountType::INITIAL_BALANCE,
|
||||
AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD,
|
||||
AccountType::ASSET,
|
||||
AccountType::BENEFICIARY,
|
||||
AccountType::CASH,
|
||||
AccountType::CREDITCARD,
|
||||
AccountType::DEBT,
|
||||
AccountType::DEFAULT,
|
||||
AccountType::EXPENSE,
|
||||
AccountType::IMPORT,
|
||||
AccountType::INITIAL_BALANCE,
|
||||
AccountType::LIABILITY_CREDIT,
|
||||
AccountType::LOAN,
|
||||
AccountType::MORTGAGE,
|
||||
AccountType::RECONCILIATION,
|
||||
AccountType::REVENUE,
|
||||
]
|
||||
);
|
||||
break;
|
||||
case 'asset_accounts':
|
||||
$this->destroyAccounts(
|
||||
[
|
||||
AccountType::ASSET, AccountType::DEFAULT,
|
||||
AccountType::ASSET,
|
||||
AccountType::DEFAULT,
|
||||
]
|
||||
);
|
||||
break;
|
||||
case 'expense_accounts':
|
||||
$this->destroyAccounts(
|
||||
[
|
||||
AccountType::BENEFICIARY, AccountType::EXPENSE,
|
||||
AccountType::BENEFICIARY,
|
||||
AccountType::EXPENSE,
|
||||
]
|
||||
);
|
||||
break;
|
||||
@@ -125,7 +156,10 @@ class DestroyController extends Controller
|
||||
case 'liabilities':
|
||||
$this->destroyAccounts(
|
||||
[
|
||||
AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD,
|
||||
AccountType::DEBT,
|
||||
AccountType::LOAN,
|
||||
AccountType::MORTGAGE,
|
||||
AccountType::CREDITCARD,
|
||||
]
|
||||
);
|
||||
break;
|
||||
@@ -162,6 +196,7 @@ class DestroyController extends Controller
|
||||
);
|
||||
break;
|
||||
}
|
||||
app('preferences')->mark();
|
||||
|
||||
return response()->json([], 204);
|
||||
}
|
||||
@@ -244,6 +279,9 @@ class DestroyController extends Controller
|
||||
$tagRepository->destroyAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
private function destroyObjectGroups(): void
|
||||
{
|
||||
/** @var ObjectGroupRepositoryInterface $repository */
|
||||
@@ -260,9 +298,19 @@ class DestroyController extends Controller
|
||||
$repository = app(AccountRepositoryInterface::class);
|
||||
$collection = $repository->getAccountsByType($types);
|
||||
$service = app(AccountDestroyService::class);
|
||||
|
||||
/** @var Account $account */
|
||||
foreach ($collection as $account) {
|
||||
$service->destroy($account, null);
|
||||
$count = $account->transactions()->count();
|
||||
if (true === $this->unused && 0 === $count) {
|
||||
Log::info(sprintf('Deleted unused account #%d "%s"', $account->id, $account->name));
|
||||
$service->destroy($account, null);
|
||||
continue;
|
||||
}
|
||||
if (false === $this->unused) {
|
||||
Log::info(sprintf('Deleting account #%d "%s"', $account->id, $account->name));
|
||||
$service->destroy($account, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -280,5 +328,4 @@ class DestroyController extends Controller
|
||||
$service->destroy($journal);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -29,6 +29,8 @@ use FireflyIII\Api\V1\Requests\Data\Export\ExportRequest;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Support\Export\ExportDataGenerator;
|
||||
use Illuminate\Http\Response as LaravelResponse;
|
||||
use Psr\Container\ContainerExceptionInterface;
|
||||
use Psr\Container\NotFoundExceptionInterface;
|
||||
|
||||
/**
|
||||
* Class ExportController
|
||||
@@ -55,7 +57,7 @@ class ExportController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/data/exportAccounts
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportAccounts
|
||||
*
|
||||
* @param ExportRequest $request
|
||||
*
|
||||
@@ -67,7 +69,6 @@ class ExportController extends Controller
|
||||
$this->exporter->setExportAccounts(true);
|
||||
|
||||
return $this->returnExport('accounts');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -75,12 +76,14 @@ class ExportController extends Controller
|
||||
*
|
||||
* @return LaravelResponse
|
||||
* @throws FireflyException
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
private function returnExport(string $key): LaravelResponse
|
||||
{
|
||||
$date = date('Y-m-d-H-i-s');
|
||||
$date = date('Y-m-d-H-i-s');
|
||||
$fileName = sprintf('%s-export-%s.csv', $date, $key);
|
||||
$data = $this->exporter->export();
|
||||
$data = $this->exporter->export();
|
||||
|
||||
/** @var LaravelResponse $response */
|
||||
$response = response($data[$key]);
|
||||
@@ -100,7 +103,7 @@ class ExportController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/data/exportBills
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportBills
|
||||
*
|
||||
* @param ExportRequest $request
|
||||
*
|
||||
@@ -116,7 +119,7 @@ class ExportController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/data/exportBudgets
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportBudgets
|
||||
*
|
||||
* @param ExportRequest $request
|
||||
*
|
||||
@@ -132,7 +135,7 @@ class ExportController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/data/exportCategories
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportCategories
|
||||
*
|
||||
* @param ExportRequest $request
|
||||
*
|
||||
@@ -148,7 +151,7 @@ class ExportController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/data/exportPiggies
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportPiggies
|
||||
*
|
||||
* @param ExportRequest $request
|
||||
*
|
||||
@@ -164,7 +167,7 @@ class ExportController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/data/exportRecurring
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportRecurring
|
||||
*
|
||||
* @param ExportRequest $request
|
||||
*
|
||||
@@ -180,7 +183,7 @@ class ExportController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/data/exportRules
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportRules
|
||||
*
|
||||
* @param ExportRequest $request
|
||||
*
|
||||
@@ -196,7 +199,7 @@ class ExportController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/data/exportTags
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportTags
|
||||
*
|
||||
* @param ExportRequest $request
|
||||
*
|
||||
@@ -212,7 +215,7 @@ class ExportController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/data/exportTransactions
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportTransactions
|
||||
*
|
||||
* @param ExportRequest $request
|
||||
*
|
||||
@@ -229,5 +232,4 @@ class ExportController extends Controller
|
||||
|
||||
return $this->returnExport('transactions');
|
||||
}
|
||||
|
||||
}
|
||||
|
99
app/Api/V1/Controllers/Data/PurgeController.php
Normal file
99
app/Api/V1/Controllers/Data/PurgeController.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
/*
|
||||
* PurgeController.php
|
||||
* Copyright (c) 2022 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/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Api\V1\Controllers\Data;
|
||||
|
||||
use FireflyIII\Api\V1\Controllers\Controller;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\Bill;
|
||||
use FireflyIII\Models\Budget;
|
||||
use FireflyIII\Models\Category;
|
||||
use FireflyIII\Models\PiggyBank;
|
||||
use FireflyIII\Models\Recurrence;
|
||||
use FireflyIII\Models\Rule;
|
||||
use FireflyIII\Models\RuleGroup;
|
||||
use FireflyIII\Models\Tag;
|
||||
use FireflyIII\Models\TransactionGroup;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
/**
|
||||
* Class PurgeController
|
||||
*/
|
||||
class PurgeController extends Controller
|
||||
{
|
||||
/**
|
||||
* TODO cleanup and use repositories.
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/purgeData
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function purge(): JsonResponse
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
// some manual code, too lazy to call all repositories.
|
||||
|
||||
// budgets:
|
||||
Budget::whereUserId($user->id)->onlyTrashed()->forceDelete();
|
||||
|
||||
// bills
|
||||
Bill::whereUserId($user->id)->onlyTrashed()->forceDelete();
|
||||
|
||||
// piggies
|
||||
$set = PiggyBank::leftJoin('accounts', 'accounts.id', 'piggy_banks.account_id')
|
||||
->where('accounts.user_id', $user->id)->onlyTrashed()->get(['piggy_banks.*']);
|
||||
/** @var PiggyBank $piggy */
|
||||
foreach ($set as $piggy) {
|
||||
$piggy->forceDelete();
|
||||
}
|
||||
|
||||
// rule group
|
||||
RuleGroup::whereUserId($user->id)->onlyTrashed()->forceDelete();
|
||||
|
||||
// rules
|
||||
Rule::whereUserId($user->id)->onlyTrashed()->forceDelete();
|
||||
|
||||
// recurring transactions
|
||||
Recurrence::whereUserId($user->id)->onlyTrashed()->forceDelete();
|
||||
|
||||
// categories
|
||||
Category::whereUserId($user->id)->onlyTrashed()->forceDelete();
|
||||
|
||||
// tags
|
||||
Tag::whereUserId($user->id)->onlyTrashed()->forceDelete();
|
||||
|
||||
|
||||
// accounts
|
||||
Account::whereUserId($user->id)->onlyTrashed()->forceDelete();
|
||||
|
||||
// transaction groups
|
||||
TransactionGroup::whereUserId($user->id)->onlyTrashed()->forceDelete();
|
||||
|
||||
// transaction journals
|
||||
TransactionJournal::whereUserId($user->id)->onlyTrashed()->forceDelete();
|
||||
|
||||
return response()->json([], 204);
|
||||
}
|
||||
}
|
@@ -50,7 +50,7 @@ class AccountController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -74,7 +74,7 @@ class AccountController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightExpenseAsset
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseAsset
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -94,7 +94,7 @@ class AccountController extends Controller
|
||||
'id' => (string)$expense['id'],
|
||||
'name' => $expense['name'],
|
||||
'difference' => $expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'], // intentional float
|
||||
'currency_id' => (string)$expense['currency_id'],
|
||||
'currency_code' => $expense['currency_code'],
|
||||
];
|
||||
@@ -105,7 +105,7 @@ class AccountController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightExpenseExpense
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseExpense
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -126,7 +126,7 @@ class AccountController extends Controller
|
||||
'id' => (string)$expense['id'],
|
||||
'name' => $expense['name'],
|
||||
'difference' => $expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'], // intentional float
|
||||
'currency_id' => (string)$expense['currency_id'],
|
||||
'currency_code' => $expense['currency_code'],
|
||||
];
|
||||
@@ -134,5 +134,4 @@ class AccountController extends Controller
|
||||
|
||||
return response()->json($result);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -57,7 +57,7 @@ class BillController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightExpenseBill
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseBill
|
||||
*
|
||||
* Expenses per bill, possibly filtered by bill and account.
|
||||
*
|
||||
@@ -93,25 +93,25 @@ class BillController extends Controller
|
||||
|
||||
if (0 !== $currencyId) {
|
||||
$response[$key] = $response[$key] ?? [
|
||||
'id' => (string)$billId,
|
||||
'name' => $journal['bill_name'],
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'id' => (string)$billId,
|
||||
'name' => $journal['bill_name'],
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$key]['difference'] = bcadd($response[$key]['difference'], $journal['amount']);
|
||||
$response[$key]['difference_float'] = (float)$response[$key]['difference'];
|
||||
$response[$key]['difference_float'] = (float)$response[$key]['difference']; // intentional float
|
||||
}
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignKey] = $response[$foreignKey] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignKey]['difference'] = bcadd($response[$foreignKey]['difference'], $journal['foreign_amount']);
|
||||
$response[$foreignKey]['difference_float'] = (float)$response[$foreignKey]['difference'];
|
||||
$response[$foreignKey]['difference_float'] = (float)$response[$foreignKey]['difference']; // intentional float
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ class BillController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightExpenseNoBill
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseNoBill
|
||||
*
|
||||
* Expenses for no bill filtered by account.
|
||||
*
|
||||
@@ -148,27 +148,26 @@ class BillController extends Controller
|
||||
|
||||
if (0 !== $currencyId) {
|
||||
$response[$currencyId] = $response[$currencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], $journal['amount']);
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference'];
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; // intentional float
|
||||
}
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignCurrencyId]['difference'] = bcadd($response[$foreignCurrencyId]['difference'], $journal['foreign_amount']);
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference'];
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference']; // intentional float
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(array_values($response));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -44,7 +44,7 @@ class BudgetController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -66,7 +66,7 @@ class BudgetController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightExpenseBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseBudget
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -91,7 +91,7 @@ class BudgetController extends Controller
|
||||
'id' => (string)$budget->id,
|
||||
'name' => $budget->name,
|
||||
'difference' => $expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'], // intentional float
|
||||
'currency_id' => (string)$expense['currency_id'],
|
||||
'currency_code' => $expense['currency_code'],
|
||||
];
|
||||
@@ -103,7 +103,7 @@ class BudgetController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightExpenseNoBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseNoBudget
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -120,14 +120,12 @@ class BudgetController extends Controller
|
||||
foreach ($expenses as $expense) {
|
||||
$result[] = [
|
||||
'difference' => $expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'], // intentional float
|
||||
'currency_id' => (string)$expense['currency_id'],
|
||||
'currency_code' => $expense['currency_code'],
|
||||
];
|
||||
}
|
||||
|
||||
return response()->json($result);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -45,7 +45,7 @@ class CategoryController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -67,7 +67,7 @@ class CategoryController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightTransferCategory
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferCategory
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -92,7 +92,7 @@ class CategoryController extends Controller
|
||||
'id' => (string)$category->id,
|
||||
'name' => $category->name,
|
||||
'difference' => $expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'], // intentional float
|
||||
'currency_id' => (string)$expense['currency_id'],
|
||||
'currency_code' => $expense['currency_code'],
|
||||
];
|
||||
@@ -104,7 +104,7 @@ class CategoryController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightTransferNoCategory
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferNoCategory
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -121,13 +121,12 @@ class CategoryController extends Controller
|
||||
foreach ($expenses as $expense) {
|
||||
$result[] = [
|
||||
'difference' => $expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'], // intentional float
|
||||
'currency_id' => (string)$expense['currency_id'],
|
||||
'currency_code' => $expense['currency_code'],
|
||||
];
|
||||
}
|
||||
|
||||
return response()->json($result);
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -34,10 +34,9 @@ use Illuminate\Http\JsonResponse;
|
||||
*/
|
||||
class PeriodController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightExpenseTotal
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseTotal
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -60,27 +59,26 @@ class PeriodController extends Controller
|
||||
|
||||
if (0 !== $currencyId) {
|
||||
$response[$currencyId] = $response[$currencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], $journal['amount']);
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference'];
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; // intentional float
|
||||
}
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignCurrencyId]['difference'] = bcadd($response[$foreignCurrencyId]['difference'], $journal['foreign_amount']);
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference'];
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference']; // intentional float
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(array_values($response));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -56,7 +56,7 @@ class TagController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightExpenseNoTag
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseNoTag
|
||||
*
|
||||
* Expenses for no tag filtered by account.
|
||||
*
|
||||
@@ -84,23 +84,23 @@ class TagController extends Controller
|
||||
|
||||
if (0 !== $currencyId) {
|
||||
$response[$currencyId] = $response[$currencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], $journal['amount']);
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference'];
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; // float but on purpose.
|
||||
}
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignCurrencyId]['difference'] = bcadd($response[$foreignCurrencyId]['difference'], $journal['foreign_amount']);
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference'];
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference']; // float but on purpose.
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ class TagController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightExpenseTag
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseTag
|
||||
*
|
||||
* Expenses per tag, possibly filtered by tag and account.
|
||||
*
|
||||
@@ -149,32 +149,31 @@ class TagController extends Controller
|
||||
// on currency ID
|
||||
if (0 !== $currencyId) {
|
||||
$response[$key] = $response[$key] ?? [
|
||||
'id' => (string)$tagId,
|
||||
'name' => $tag['name'],
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'id' => (string)$tagId,
|
||||
'name' => $tag['name'],
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$key]['difference'] = bcadd($response[$key]['difference'], $journal['amount']);
|
||||
$response[$key]['difference_float'] = (float)$response[$key]['difference'];
|
||||
$response[$key]['difference_float'] = (float)$response[$key]['difference']; // float but on purpose.
|
||||
}
|
||||
|
||||
// on foreign ID
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignKey] = $journal[$foreignKey] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignKey]['difference'] = bcadd($response[$foreignKey]['difference'], $journal['foreign_amount']);
|
||||
$response[$foreignKey]['difference_float'] = (float)$response[$foreignKey]['difference'];
|
||||
$response[$foreignKey]['difference_float'] = (float)$response[$foreignKey]['difference']; // float but on purpose.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(array_values($response));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -37,7 +37,7 @@ use Illuminate\Http\JsonResponse;
|
||||
* Class AccountController
|
||||
*
|
||||
* Shows income information grouped or limited by date.
|
||||
* Ie. all income grouped by account + currency.
|
||||
* I.e. all income grouped by account + currency.
|
||||
*/
|
||||
class AccountController extends Controller
|
||||
{
|
||||
@@ -50,7 +50,7 @@ class AccountController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -74,7 +74,7 @@ class AccountController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightIncomeAsset
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeAsset
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -93,7 +93,7 @@ class AccountController extends Controller
|
||||
'id' => (string)$entry['id'],
|
||||
'name' => $entry['name'],
|
||||
'difference' => $entry['sum'],
|
||||
'difference_float' => (float)$entry['sum'],
|
||||
'difference_float' => (float)$entry['sum'], // float but on purpose.
|
||||
'currency_id' => (string)$entry['currency_id'],
|
||||
'currency_code' => $entry['currency_code'],
|
||||
];
|
||||
@@ -104,7 +104,7 @@ class AccountController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightIncomeRevenue
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeRevenue
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -125,7 +125,7 @@ class AccountController extends Controller
|
||||
'id' => (string)$entry['id'],
|
||||
'name' => $entry['name'],
|
||||
'difference' => $entry['sum'],
|
||||
'difference_float' => (float)$entry['sum'],
|
||||
'difference_float' => (float)$entry['sum'], // float but on purpose.
|
||||
'currency_id' => (string)$entry['currency_id'],
|
||||
'currency_code' => $entry['currency_code'],
|
||||
];
|
||||
@@ -133,5 +133,4 @@ class AccountController extends Controller
|
||||
|
||||
return response()->json($result);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -45,7 +45,7 @@ class CategoryController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -67,7 +67,7 @@ class CategoryController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightIncomeCategory
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeCategory
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -92,7 +92,7 @@ class CategoryController extends Controller
|
||||
'id' => (string)$category->id,
|
||||
'name' => $category->name,
|
||||
'difference' => $expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'], // float but on purpose.
|
||||
'currency_id' => (string)$expense['currency_id'],
|
||||
'currency_code' => $expense['currency_code'],
|
||||
];
|
||||
@@ -104,7 +104,7 @@ class CategoryController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightIncomeNoCategory
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeNoCategory
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -121,13 +121,12 @@ class CategoryController extends Controller
|
||||
foreach ($expenses as $expense) {
|
||||
$result[] = [
|
||||
'difference' => $expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'],
|
||||
'difference_float' => (float)$expense['sum'], // float but on purpose.
|
||||
'currency_id' => (string)$expense['currency_id'],
|
||||
'currency_code' => $expense['currency_code'],
|
||||
];
|
||||
}
|
||||
|
||||
return response()->json($result);
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -34,10 +34,9 @@ use Illuminate\Http\JsonResponse;
|
||||
*/
|
||||
class PeriodController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightIncomeTotal
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeTotal
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -60,29 +59,29 @@ class PeriodController extends Controller
|
||||
|
||||
if (0 !== $currencyId) {
|
||||
$response[$currencyId] = $response[$currencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], app('steam')->positive($journal['amount']));
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference'];
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; // float but on purpose.
|
||||
}
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignCurrencyId]['difference'] = bcadd(
|
||||
$response[$foreignCurrencyId]['difference'], app('steam')->positive($journal['foreign_amount'])
|
||||
$response[$foreignCurrencyId]['difference'],
|
||||
app('steam')->positive($journal['foreign_amount'])
|
||||
);
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference'];
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference']; // float but on purpose.
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(array_values($response));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -57,7 +57,7 @@ class TagController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightIncomeTag
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeTag
|
||||
*
|
||||
* Expenses for no tag filtered by account.
|
||||
*
|
||||
@@ -85,23 +85,24 @@ class TagController extends Controller
|
||||
|
||||
if (0 !== $currencyId) {
|
||||
$response[$currencyId] = $response[$currencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], app('steam')->positive($journal['amount']));
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference'];
|
||||
}
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignCurrencyId]['difference'] = bcadd(
|
||||
$response[$foreignCurrencyId]['difference'], app('steam')->positive($journal['foreign_amount'])
|
||||
$response[$foreignCurrencyId]['difference'],
|
||||
app('steam')->positive($journal['foreign_amount'])
|
||||
);
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference'];
|
||||
}
|
||||
@@ -112,7 +113,7 @@ class TagController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightIncomeNoTag
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeNoTag
|
||||
*
|
||||
* Expenses per tag, possibly filtered by tag and account.
|
||||
*
|
||||
@@ -152,13 +153,13 @@ class TagController extends Controller
|
||||
// on currency ID
|
||||
if (0 !== $currencyId) {
|
||||
$response[$key] = $response[$key] ?? [
|
||||
'id' => (string)$tagId,
|
||||
'name' => $tag['name'],
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'id' => (string)$tagId,
|
||||
'name' => $tag['name'],
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$key]['difference'] = bcadd($response[$key]['difference'], app('steam')->positive($journal['amount']));
|
||||
$response[$key]['difference_float'] = (float)$response[$key]['difference'];
|
||||
}
|
||||
@@ -166,13 +167,14 @@ class TagController extends Controller
|
||||
// on foreign ID
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignKey] = $journal[$foreignKey] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignKey]['difference'] = bcadd(
|
||||
$response[$foreignKey]['difference'], app('steam')->positive($journal['foreign_amount'])
|
||||
$response[$foreignKey]['difference'],
|
||||
app('steam')->positive($journal['foreign_amount'])
|
||||
);
|
||||
$response[$foreignKey]['difference_float'] = (float)$response[$foreignKey]['difference'];
|
||||
}
|
||||
@@ -181,5 +183,4 @@ class TagController extends Controller
|
||||
|
||||
return response()->json(array_values($response));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -41,7 +41,7 @@ class AccountController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -59,7 +59,7 @@ class AccountController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightTransfers
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransfers
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
|
@@ -44,7 +44,7 @@ class CategoryController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -66,7 +66,7 @@ class CategoryController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightTransferCategory
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferCategory
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -103,7 +103,7 @@ class CategoryController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightTransferNoCategory
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferNoCategory
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -127,6 +127,5 @@ class CategoryController extends Controller
|
||||
}
|
||||
|
||||
return response()->json($result);
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -34,10 +34,9 @@ use Illuminate\Http\JsonResponse;
|
||||
*/
|
||||
class PeriodController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightTransferTotal
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferTotal
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -60,23 +59,24 @@ class PeriodController extends Controller
|
||||
|
||||
if (0 !== $currencyId) {
|
||||
$response[$currencyId] = $response[$currencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], app('steam')->positive($journal['amount']));
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference'];
|
||||
}
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignCurrencyId]['difference'] = bcadd(
|
||||
$response[$foreignCurrencyId]['difference'], app('steam')->positive($journal['foreign_amount'])
|
||||
$response[$foreignCurrencyId]['difference'],
|
||||
app('steam')->positive($journal['foreign_amount'])
|
||||
);
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference'];
|
||||
}
|
||||
@@ -84,5 +84,4 @@ class PeriodController extends Controller
|
||||
|
||||
return response()->json(array_values($response));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -56,7 +56,7 @@ class TagController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightTransferNoTag
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferNoTag
|
||||
*
|
||||
* @param GenericRequest $request
|
||||
*
|
||||
@@ -82,23 +82,24 @@ class TagController extends Controller
|
||||
|
||||
if (0 !== $currencyId) {
|
||||
$response[$currencyId] = $response[$currencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$currencyId]['difference'] = bcadd($response[$currencyId]['difference'], app('steam')->positive($journal['amount']));
|
||||
$response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference'];
|
||||
}
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignCurrencyId]['difference'] = bcadd(
|
||||
$response[$foreignCurrencyId]['difference'], app('steam')->positive($journal['foreign_amount'])
|
||||
$response[$foreignCurrencyId]['difference'],
|
||||
app('steam')->positive($journal['foreign_amount'])
|
||||
);
|
||||
$response[$foreignCurrencyId]['difference_float'] = (float)$response[$foreignCurrencyId]['difference'];
|
||||
}
|
||||
@@ -109,7 +110,7 @@ class TagController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/insight/insightTransferTag
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferTag
|
||||
*
|
||||
* Transfers per tag, possibly filtered by tag and account.
|
||||
*
|
||||
@@ -149,13 +150,13 @@ class TagController extends Controller
|
||||
// on currency ID
|
||||
if (0 !== $currencyId) {
|
||||
$response[$key] = $response[$key] ?? [
|
||||
'id' => (string)$tagId,
|
||||
'name' => $tag['name'],
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
'id' => (string)$tagId,
|
||||
'name' => $tag['name'],
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$currencyId,
|
||||
'currency_code' => $journal['currency_code'],
|
||||
];
|
||||
$response[$key]['difference'] = bcadd($response[$key]['difference'], app('steam')->positive($journal['amount']));
|
||||
$response[$key]['difference_float'] = (float)$response[$key]['difference'];
|
||||
}
|
||||
@@ -163,15 +164,16 @@ class TagController extends Controller
|
||||
// on foreign ID
|
||||
if (0 !== $foreignCurrencyId) {
|
||||
$response[$foreignKey] = $journal[$foreignKey] ?? [
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
'difference' => '0',
|
||||
'difference_float' => 0,
|
||||
'currency_id' => (string)$foreignCurrencyId,
|
||||
'currency_code' => $journal['foreign_currency_code'],
|
||||
];
|
||||
$response[$foreignKey]['difference'] = bcadd(
|
||||
$response[$foreignKey]['difference'], app('steam')->positive($journal['foreign_amount'])
|
||||
$response[$foreignKey]['difference'],
|
||||
app('steam')->positive($journal['foreign_amount'])
|
||||
);
|
||||
$response[$foreignKey]['difference_float'] = (float)$response[$foreignKey]['difference'];
|
||||
$response[$foreignKey]['difference_float'] = (float)$response[$foreignKey]['difference']; // intentional float
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -40,7 +40,7 @@ class DestroyController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -57,18 +57,18 @@ class DestroyController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/accounts/deleteAccount
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/deleteAccount
|
||||
*
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Account $account
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function destroy(Account $account): JsonResponse
|
||||
{
|
||||
$this->repository->destroy($account, null);
|
||||
app('preferences')->mark();
|
||||
|
||||
return response()->json([], 204);
|
||||
}
|
||||
|
@@ -54,7 +54,7 @@ class ListController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -71,12 +71,11 @@ class ListController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/accounts/listAttachmentByAccount
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/listAttachmentByAccount
|
||||
*
|
||||
* @param Account $account
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @codeCoverageIgnore
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function attachments(Account $account): JsonResponse
|
||||
@@ -104,13 +103,12 @@ class ListController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/accounts/listPiggyBankByAccount
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/listPiggyBankByAccount
|
||||
*
|
||||
* @param Account $account
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function piggyBanks(Account $account): JsonResponse
|
||||
{
|
||||
@@ -127,7 +125,7 @@ class ListController extends Controller
|
||||
|
||||
// make paginator:
|
||||
$paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page'));
|
||||
$paginator->setPath(route('api.v1.accounts.piggy_banks', [$account->id]) . $this->buildParams());
|
||||
$paginator->setPath(route('api.v1.accounts.piggy-banks', [$account->id]) . $this->buildParams());
|
||||
|
||||
/** @var PiggyBankTransformer $transformer */
|
||||
$transformer = app(PiggyBankTransformer::class);
|
||||
@@ -137,16 +135,14 @@ class ListController extends Controller
|
||||
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/accounts/listTransactionByAccount
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/listTransactionByAccount
|
||||
*
|
||||
* Show all transaction groups related to the account.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Account $account
|
||||
|
@@ -50,7 +50,7 @@ class ShowController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -67,7 +67,7 @@ class ShowController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/accounts/listAccount
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/listAccount
|
||||
*
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
@@ -75,7 +75,6 @@ class ShowController extends Controller
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
@@ -84,7 +83,7 @@ class ShowController extends Controller
|
||||
$this->parameters->set('type', $type);
|
||||
|
||||
// types to get, page size:
|
||||
$types = $this->mapAccountTypes($this->parameters->get('type'));
|
||||
$types = $this->mapAccountTypes($this->parameters->get('type'));
|
||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||
|
||||
// get list of accounts. Count it and split it.
|
||||
@@ -113,7 +112,7 @@ class ShowController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/accounts/getAccount
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/getAccount
|
||||
*
|
||||
* Show single instance.
|
||||
*
|
||||
@@ -135,5 +134,4 @@ class ShowController extends Controller
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -42,7 +42,7 @@ class StoreController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -59,7 +59,7 @@ class StoreController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/accounts/storeAccount
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/storeAccount
|
||||
*
|
||||
* Store a new instance.
|
||||
*
|
||||
@@ -82,5 +82,4 @@ class StoreController extends Controller
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -29,8 +29,8 @@ use FireflyIII\Models\Account;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Transformers\AccountTransformer;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use League\Fractal\Resource\Item;
|
||||
use Log;
|
||||
use Preferences;
|
||||
|
||||
/**
|
||||
@@ -45,7 +45,7 @@ class UpdateController extends Controller
|
||||
/**
|
||||
* AccountController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -62,7 +62,7 @@ class UpdateController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/accounts/updateAccount
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/updateAccount
|
||||
*
|
||||
* Update account.
|
||||
*
|
||||
@@ -74,10 +74,10 @@ class UpdateController extends Controller
|
||||
public function update(UpdateRequest $request, Account $account): JsonResponse
|
||||
{
|
||||
Log::debug(sprintf('Now in %s', __METHOD__));
|
||||
$data = $request->getUpdateData();
|
||||
$data = $request->getUpdateData();
|
||||
$data['type'] = config('firefly.shortNamesByFullName.' . $account->accountType->type);
|
||||
$account = $this->repository->update($account, $data);
|
||||
$manager = $this->getManager();
|
||||
$account = $this->repository->update($account, $data);
|
||||
$manager = $this->getManager();
|
||||
$account->refresh();
|
||||
Preferences::mark();
|
||||
|
||||
|
@@ -40,7 +40,7 @@ class DestroyController extends Controller
|
||||
/**
|
||||
* DestroyController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -49,7 +49,7 @@ class DestroyController extends Controller
|
||||
$this->middleware(
|
||||
function ($request, $next) {
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
$user = auth()->user();
|
||||
$this->repository = app(AttachmentRepositoryInterface::class);
|
||||
$this->repository->setUser($user);
|
||||
|
||||
@@ -60,11 +60,10 @@ class DestroyController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/attachments/deleteAttachment
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/deleteAttachment
|
||||
*
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Attachment $attachment
|
||||
*
|
||||
@@ -73,6 +72,7 @@ class DestroyController extends Controller
|
||||
public function destroy(Attachment $attachment): JsonResponse
|
||||
{
|
||||
$this->repository->destroy($attachment);
|
||||
app('preferences')->mark();
|
||||
|
||||
return response()->json([], 204);
|
||||
}
|
||||
|
@@ -47,7 +47,7 @@ class ShowController extends Controller
|
||||
/**
|
||||
* ShowController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -67,13 +67,12 @@ class ShowController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/attachments/downloadAttachment
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/downloadAttachment
|
||||
*
|
||||
* Download an attachment.
|
||||
*
|
||||
* @param Attachment $attachment
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @return LaravelResponse
|
||||
* @throws FireflyException
|
||||
*/
|
||||
@@ -112,13 +111,12 @@ class ShowController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/attachments/listAttachment
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/listAttachment
|
||||
*
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function index(): JsonResponse
|
||||
{
|
||||
@@ -148,7 +146,7 @@ class ShowController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/attachments/getAttachment
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/getAttachment
|
||||
*
|
||||
* Display the specified resource.
|
||||
*
|
||||
|
@@ -34,8 +34,8 @@ use FireflyIII\Transformers\AttachmentTransformer;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use League\Fractal\Resource\Item;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class StoreController
|
||||
@@ -47,7 +47,7 @@ class StoreController extends Controller
|
||||
/**
|
||||
* StoreController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -67,7 +67,7 @@ class StoreController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/attachments/uploadAttachment
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/uploadAttachment
|
||||
*
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
@@ -95,7 +95,6 @@ class StoreController extends Controller
|
||||
/**
|
||||
* Upload an attachment.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Attachment $attachment
|
||||
|
@@ -43,7 +43,7 @@ class UpdateController extends Controller
|
||||
/**
|
||||
* UpdateController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -52,7 +52,7 @@ class UpdateController extends Controller
|
||||
$this->middleware(
|
||||
function ($request, $next) {
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
$user = auth()->user();
|
||||
$this->repository = app(AttachmentRepositoryInterface::class);
|
||||
$this->repository->setUser($user);
|
||||
|
||||
@@ -63,7 +63,7 @@ class UpdateController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/attachments/updateAttachment
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/updateAttachment
|
||||
*
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
|
@@ -45,7 +45,7 @@ class ShowController extends Controller
|
||||
/**
|
||||
* AvailableBudgetController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -64,13 +64,12 @@ class ShowController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/available_budgets/getAvailableBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/available_budgets/getAvailableBudget
|
||||
*
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function index(): JsonResponse
|
||||
{
|
||||
@@ -89,7 +88,7 @@ class ShowController extends Controller
|
||||
|
||||
// make paginator:
|
||||
$paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page'));
|
||||
$paginator->setPath(route('api.v1.available_budgets.index') . $this->buildParams());
|
||||
$paginator->setPath(route('api.v1.available-budgets.index') . $this->buildParams());
|
||||
|
||||
/** @var AvailableBudgetTransformer $transformer */
|
||||
$transformer = app(AvailableBudgetTransformer::class);
|
||||
@@ -103,14 +102,13 @@ class ShowController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/available_budgets/getAvailableBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/available_budgets/getAvailableBudget
|
||||
*
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param AvailableBudget $availableBudget
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function show(AvailableBudget $availableBudget): JsonResponse
|
||||
{
|
||||
@@ -124,5 +122,4 @@ class ShowController extends Controller
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,105 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* StoreController.php
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Api\V1\Controllers\Models\AvailableBudget;
|
||||
|
||||
use FireflyIII\Api\V1\Controllers\Controller;
|
||||
use FireflyIII\Api\V1\Requests\Models\AvailableBudget\Request;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Factory\TransactionCurrencyFactory;
|
||||
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
|
||||
use FireflyIII\Transformers\AvailableBudgetTransformer;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use JsonException;
|
||||
use League\Fractal\Resource\Item;
|
||||
|
||||
/**
|
||||
* Class StoreController
|
||||
*/
|
||||
class StoreController extends Controller
|
||||
{
|
||||
private AvailableBudgetRepositoryInterface $abRepository;
|
||||
|
||||
/**
|
||||
* AvailableBudgetController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->middleware(
|
||||
function ($request, $next) {
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
$this->abRepository = app(AvailableBudgetRepositoryInterface::class);
|
||||
$this->abRepository->setUser($user);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/available_budgets/storeAvailableBudget
|
||||
*
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @throws JsonException
|
||||
*/
|
||||
public function store(Request $request): JsonResponse
|
||||
{
|
||||
$data = $request->getAll();
|
||||
$data['start']->startOfDay();
|
||||
$data['end']->endOfDay();
|
||||
|
||||
// currency is not mandatory:
|
||||
if (array_key_exists('currency_id', $data) || array_key_exists('currency_code', $data)) {
|
||||
$factory = app(TransactionCurrencyFactory::class);
|
||||
$currency = $factory->find($data['currency_id'] ?? null, $data['currency_code'] ?? null);
|
||||
$data['currency_id'] = $currency->id;
|
||||
unset($data['currency_code']);
|
||||
}
|
||||
if (!array_key_exists('currency_id', $data)) {
|
||||
$currency = app('amount')->getDefaultCurrencyByUser(auth()->user());
|
||||
$data['currency_id'] = $currency->id;
|
||||
}
|
||||
|
||||
$availableBudget = $this->abRepository->store($data);
|
||||
$manager = $this->getManager();
|
||||
|
||||
/** @var AvailableBudgetTransformer $transformer */
|
||||
$transformer = app(AvailableBudgetTransformer::class);
|
||||
$transformer->setParameters($this->parameters);
|
||||
|
||||
$resource = new Item($availableBudget, $transformer, 'available_budgets');
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
}
|
||||
}
|
@@ -1,100 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* UpdateController.php
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Api\V1\Controllers\Models\AvailableBudget;
|
||||
|
||||
use FireflyIII\Api\V1\Controllers\Controller;
|
||||
use FireflyIII\Api\V1\Requests\Models\AvailableBudget\Request;
|
||||
use FireflyIII\Factory\TransactionCurrencyFactory;
|
||||
use FireflyIII\Models\AvailableBudget;
|
||||
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
|
||||
use FireflyIII\Transformers\AvailableBudgetTransformer;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use League\Fractal\Resource\Item;
|
||||
|
||||
/**
|
||||
* Class UpdateController
|
||||
*/
|
||||
class UpdateController extends Controller
|
||||
{
|
||||
private AvailableBudgetRepositoryInterface $abRepository;
|
||||
|
||||
/**
|
||||
* AvailableBudgetController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->middleware(
|
||||
function ($request, $next) {
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
$this->abRepository = app(AvailableBudgetRepositoryInterface::class);
|
||||
$this->abRepository->setUser($user);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/available_budgets/updateAvailableBudget
|
||||
*
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param AvailableBudget $availableBudget
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function update(Request $request, AvailableBudget $availableBudget): JsonResponse
|
||||
{
|
||||
$data = $request->getAll();
|
||||
|
||||
// find and validate currency ID
|
||||
if (array_key_exists('currency_id', $data) || array_key_exists('currency_code', $data)) {
|
||||
$factory = app(TransactionCurrencyFactory::class);
|
||||
$currency = $factory->find($data['currency_id'] ?? null, $data['currency_code'] ?? null) ?? app('amount')->getDefaultCurrency();
|
||||
$currency->enabled = true;
|
||||
$currency->save();
|
||||
unset($data['currency_code']);
|
||||
$data['currency_id'] = $currency->id;
|
||||
}
|
||||
|
||||
$this->abRepository->updateAvailableBudget($availableBudget, $data);
|
||||
$manager = $this->getManager();
|
||||
|
||||
/** @var AvailableBudgetTransformer $transformer */
|
||||
$transformer = app(AvailableBudgetTransformer::class);
|
||||
$transformer->setParameters($this->parameters);
|
||||
|
||||
$resource = new Item($availableBudget, $transformer, 'available_budgets');
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
|
||||
}
|
||||
}
|
@@ -38,7 +38,7 @@ class DestroyController extends Controller
|
||||
/**
|
||||
* BillController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -55,20 +55,19 @@ class DestroyController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/bills/deleteBill
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/deleteBill
|
||||
*
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Bill $bill
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function destroy(Bill $bill): JsonResponse
|
||||
{
|
||||
$this->repository->destroy($bill);
|
||||
app('preferences')->mark();
|
||||
|
||||
return response()->json([], 204);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -51,7 +51,7 @@ class ListController extends Controller
|
||||
/**
|
||||
* BillController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -68,7 +68,7 @@ class ListController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/bills/listAttachmentByBill
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/listAttachmentByBill
|
||||
*
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
@@ -76,7 +76,6 @@ class ListController extends Controller
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function attachments(Bill $bill): JsonResponse
|
||||
{
|
||||
@@ -103,7 +102,7 @@ class ListController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/bills/listRuleByBill
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/listRuleByBill
|
||||
*
|
||||
* List all of them.
|
||||
*
|
||||
@@ -111,7 +110,6 @@ class ListController extends Controller
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function rules(Bill $bill): JsonResponse
|
||||
{
|
||||
@@ -136,12 +134,11 @@ class ListController extends Controller
|
||||
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/bills/listTransactionByBill
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/listTransactionByBill
|
||||
*
|
||||
* Show all transactions.
|
||||
*
|
||||
@@ -151,7 +148,6 @@ class ListController extends Controller
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function transactions(Request $request, Bill $bill): JsonResponse
|
||||
{
|
||||
@@ -200,5 +196,4 @@ class ListController extends Controller
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -44,7 +44,7 @@ class ShowController extends Controller
|
||||
/**
|
||||
* BillController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -61,13 +61,12 @@ class ShowController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/bills/listBill
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/listBill
|
||||
*
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function index(): JsonResponse
|
||||
{
|
||||
@@ -91,14 +90,13 @@ class ShowController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/bills/getBill
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/getBill
|
||||
*
|
||||
* Show the specified bill.
|
||||
*
|
||||
* @param Bill $bill
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function show(Bill $bill): JsonResponse
|
||||
{
|
||||
|
@@ -44,7 +44,7 @@ class StoreController extends Controller
|
||||
/**
|
||||
* BillController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -61,7 +61,7 @@ class StoreController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/bills/storeBill
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/storeBill
|
||||
*
|
||||
* Store a bill.
|
||||
*
|
||||
@@ -72,8 +72,8 @@ class StoreController extends Controller
|
||||
*/
|
||||
public function store(StoreRequest $request): JsonResponse
|
||||
{
|
||||
$data = $request->getAll();
|
||||
$bill = $this->repository->store($data);
|
||||
$data = $request->getAll();
|
||||
$bill = $this->repository->store($data);
|
||||
$manager = $this->getManager();
|
||||
|
||||
/** @var BillTransformer $transformer */
|
||||
|
@@ -41,7 +41,7 @@ class UpdateController extends Controller
|
||||
/**
|
||||
* BillController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -58,7 +58,7 @@ class UpdateController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/bills/updateBill
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/updateBill
|
||||
*
|
||||
* Update a bill.
|
||||
*
|
||||
@@ -69,8 +69,8 @@ class UpdateController extends Controller
|
||||
*/
|
||||
public function update(UpdateRequest $request, Bill $bill): JsonResponse
|
||||
{
|
||||
$data = $request->getAll();
|
||||
$bill = $this->repository->update($bill, $data);
|
||||
$data = $request->getAll();
|
||||
$bill = $this->repository->update($bill, $data);
|
||||
$manager = $this->getManager();
|
||||
|
||||
/** @var BillTransformer $transformer */
|
||||
@@ -80,7 +80,5 @@ class UpdateController extends Controller
|
||||
$resource = new Item($bill, $transformer, 'bills');
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -38,7 +38,7 @@ class DestroyController extends Controller
|
||||
/**
|
||||
* DestroyController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -55,18 +55,18 @@ class DestroyController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/budgets/deleteBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/deleteBudget
|
||||
*
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Budget $budget
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function destroy(Budget $budget): JsonResponse
|
||||
{
|
||||
$this->repository->destroy($budget);
|
||||
app('preferences')->mark();
|
||||
|
||||
return response()->json([], 204);
|
||||
}
|
||||
|
@@ -53,7 +53,7 @@ class ListController extends Controller
|
||||
/**
|
||||
* ListController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -72,13 +72,12 @@ class ListController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/budgets/listAttachmentByBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listAttachmentByBudget
|
||||
*
|
||||
* @param Budget $budget
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function attachments(Budget $budget): JsonResponse
|
||||
{
|
||||
@@ -105,7 +104,7 @@ class ListController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/budgets/listBudgetLimitByBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listBudgetLimitByBudget
|
||||
*
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
@@ -113,7 +112,6 @@ class ListController extends Controller
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function budgetLimits(Budget $budget): JsonResponse
|
||||
{
|
||||
@@ -124,7 +122,7 @@ class ListController extends Controller
|
||||
$count = $collection->count();
|
||||
$budgetLimits = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||
$paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page'));
|
||||
$paginator->setPath(route('api.v1.budgets.budget_limits', [$budget->id]) . $this->buildParams());
|
||||
$paginator->setPath(route('api.v1.budgets.budget-limits', [$budget->id]) . $this->buildParams());
|
||||
|
||||
/** @var BudgetLimitTransformer $transformer */
|
||||
$transformer = app(BudgetLimitTransformer::class);
|
||||
@@ -137,7 +135,7 @@ class ListController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/budgets/listTransactionByBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listTransactionByBudget
|
||||
*
|
||||
* Show all transactions.
|
||||
*
|
||||
@@ -147,7 +145,6 @@ class ListController extends Controller
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function transactions(Request $request, Budget $budget): JsonResponse
|
||||
{
|
||||
@@ -201,4 +198,66 @@ class ListController extends Controller
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
}
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listTransactionWithoutBudget
|
||||
*
|
||||
* Show all transactions.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function withoutBudget(Request $request): JsonResponse
|
||||
{
|
||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||
|
||||
// user can overrule page size with limit parameter.
|
||||
$limit = $this->parameters->get('limit');
|
||||
if (null !== $limit && $limit > 0) {
|
||||
$pageSize = $limit;
|
||||
}
|
||||
|
||||
$type = $request->get('type') ?? 'default';
|
||||
$this->parameters->set('type', $type);
|
||||
|
||||
$types = $this->mapTransactionTypes($this->parameters->get('type'));
|
||||
$manager = $this->getManager();
|
||||
|
||||
/** @var User $admin */
|
||||
$admin = auth()->user();
|
||||
|
||||
// use new group collector:
|
||||
/** @var GroupCollectorInterface $collector */
|
||||
$collector = app(GroupCollectorInterface::class);
|
||||
$collector
|
||||
->setUser($admin)
|
||||
// filter on budget.
|
||||
->withoutBudget()
|
||||
// all info needed for the API:
|
||||
->withAPIInformation()
|
||||
// set page size:
|
||||
->setLimit($pageSize)
|
||||
// set page to retrieve
|
||||
->setPage($this->parameters->get('page'))
|
||||
// set types of transactions to return.
|
||||
->setTypes($types);
|
||||
|
||||
if (null !== $this->parameters->get('start') && null !== $this->parameters->get('end')) {
|
||||
$collector->setRange($this->parameters->get('start'), $this->parameters->get('end'));
|
||||
}
|
||||
|
||||
$paginator = $collector->getPaginatedGroups();
|
||||
$paginator->setPath(route('api.v1.budgets.without-budget') . $this->buildParams());
|
||||
$transactions = $paginator->getCollection();
|
||||
|
||||
/** @var TransactionGroupTransformer $transformer */
|
||||
$transformer = app(TransactionGroupTransformer::class);
|
||||
$transformer->setParameters($this->parameters);
|
||||
$resource = new FractalCollection($transactions, $transformer, 'transactions');
|
||||
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
}
|
||||
}
|
||||
|
@@ -46,14 +46,14 @@ class ShowController extends Controller
|
||||
/**
|
||||
* ListController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->middleware(
|
||||
function ($request, $next) {
|
||||
$this->repository = app(BudgetRepositoryInterface::class);
|
||||
$this->repository = app(BudgetRepositoryInterface::class);
|
||||
$this->blRepository = app(BudgetLimitRepositoryInterface::class);
|
||||
$this->repository->setUser(auth()->user());
|
||||
$this->blRepository->setUser(auth()->user());
|
||||
@@ -65,13 +65,12 @@ class ShowController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/budgets/listBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listBudget
|
||||
*
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws FireflyException
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function index(): JsonResponse
|
||||
{
|
||||
@@ -105,7 +104,6 @@ class ShowController extends Controller
|
||||
* @param Budget $budget
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function show(Budget $budget): JsonResponse
|
||||
{
|
||||
@@ -119,5 +117,4 @@ class ShowController extends Controller
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -41,7 +41,7 @@ class StoreController extends Controller
|
||||
/**
|
||||
* StoreController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -58,7 +58,7 @@ class StoreController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/budgets/storeBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/storeBudget
|
||||
*
|
||||
* Store a budget.
|
||||
*
|
||||
|
@@ -41,7 +41,7 @@ class UpdateController extends Controller
|
||||
/**
|
||||
* UpdateController constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -58,7 +58,7 @@ class UpdateController extends Controller
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/#/budgets/updateBudget
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/updateBudget
|
||||
*
|
||||
* Update a budget.
|
||||
*
|
||||
@@ -80,6 +80,5 @@ class UpdateController extends Controller
|
||||
$resource = new Item($budget, $transformer, 'budgets');
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user