mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 02:36:28 +00:00 
			
		
		
		
	Compare commits
	
		
			1095 Commits
		
	
	
		
			v6.1.0-alp
			...
			v6.1.21
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | abcddb09bf | ||
|  | cf71a0fc55 | ||
|  | 78253f9e1e | ||
|  | ebd0848c7f | ||
|  | c8461eb0b5 | ||
|  | a4cbdeaeac | ||
|  | 3e1ce69d52 | ||
|  | 08a26b976e | ||
|  | 5fc55381a2 | ||
|  | dbf3d24ae7 | ||
|  | cc7c6e02c5 | ||
|  | b45aa85853 | ||
|  | e7526ac5e3 | ||
|  | 441ada70b8 | ||
|  | dedc06a46b | ||
|  | b0adf1b277 | ||
|  | 28f65e9f44 | ||
|  | a013af5f0d | ||
|  | 9552701662 | ||
|  | ef52f0aad1 | ||
|  | 0b6f04905a | ||
|  | cdb36357d4 | ||
|  | 8938622bd9 | ||
|  | b210294aa9 | ||
|  | 5b02f20775 | ||
|  | fac382a5df | ||
|  | 88d88bebc9 | ||
|  | 755fb9c29b | ||
|  | 51a835ab51 | ||
|  | c9895ab182 | ||
|  | e71d46a4e5 | ||
|  | 8d1d5f37c1 | ||
|  | 525a68682d | ||
|  | 715648d0d8 | ||
|  | 9452e93f22 | ||
|  | a6aa145471 | ||
|  | 25aa6dcb59 | ||
|  | bb2270b274 | ||
|  | d7f6b4143e | ||
|  | 0cf0e26fa8 | ||
|  | cc23197d60 | ||
|  | bc1721d95e | ||
|  | 0d19173da6 | ||
|  | 1983f07d3c | ||
|  | aad1b91cc2 | ||
|  | 8cb1057a33 | ||
|  | b178032985 | ||
|  | 561213e95d | ||
|  | 44fa7c4306 | ||
|  | e2169563e2 | ||
|  | 845344e003 | ||
|  | cdb48453e8 | ||
|  | 9669cef518 | ||
|  | f962f71ed7 | ||
|  | 94ed4021fb | ||
|  | 1765855c57 | ||
|  | 55cf3e7d44 | ||
|  | 9f1840dc05 | ||
|  | 78dab2e5f9 | ||
|  | 103b9d5005 | ||
|  | 1b75b778d8 | ||
|  | 7e665dbdfc | ||
|  | b6897ec3a9 | ||
|  | 660260174a | ||
|  | 78d32865b5 | ||
|  | edfa92c1aa | ||
|  | 63012f269c | ||
|  | 7d0e7f779f | ||
|  | b8e18f80f4 | ||
|  | 481b01e4f7 | ||
|  | edf2030251 | ||
|  | bd1cfffb61 | ||
|  | 629f70d27d | ||
|  | 57f5ebc0f9 | ||
|  | b4f51e7b47 | ||
|  | d78d254e86 | ||
|  | eb0c113699 | ||
|  | 23045ebd59 | ||
|  | 2e5931f304 | ||
|  | a620b07c00 | ||
|  | cb724145f2 | ||
|  | 8ef17f6686 | ||
|  | debfd9160c | ||
|  | f2482e4ace | ||
|  | d98d757f8b | ||
|  | 0c9a41a929 | ||
|  | e26f78bf50 | ||
|  | ed265f68ba | ||
|  | d2e9b64bf5 | ||
|  | 3811aff206 | ||
|  | 762d898fee | ||
|  | 5e6034fc86 | ||
|  | 9da10459d6 | ||
|  | ff80cedd6b | ||
|  | b213148ae8 | ||
|  | c8646e20cb | ||
|  | 76a41fec50 | ||
|  | 0e705bd038 | ||
|  | f33ffb98ff | ||
|  | faa0d59340 | ||
|  | 5af0219884 | ||
|  | dafd99f155 | ||
|  | 3560f0388c | ||
|  | b2954658d8 | ||
|  | 44581d9983 | ||
|  | 02dcfeb227 | ||
|  | d8bafb349d | ||
|  | 889598a4c8 | ||
|  | 7e37d10016 | ||
|  | ebaebb09d1 | ||
|  | 531a3a4b6c | ||
|  | b3e313821b | ||
|  | 51958af422 | ||
|  | e3b21ccdba | ||
|  | 31bb208835 | ||
|  | 8c97e805a2 | ||
|  | ac8a43bb37 | ||
|  | 2df4b40a28 | ||
|  | e06736c254 | ||
|  | ec367e94ce | ||
|  | 1515dea9fa | ||
|  | adedf9c17d | ||
|  | 0b52fb84f1 | ||
|  | 16e742ae73 | ||
|  | 1b4471dfae | ||
|  | ae152ce0a4 | ||
|  | 2aa023f140 | ||
|  | 6e2e4c6f08 | ||
|  | 1c8c038735 | ||
|  | 4d339a6da8 | ||
|  | b7edd4407a | ||
|  | a679a1e94a | ||
|  | 180451d32f | ||
|  | 7396f22bca | ||
|  | 058019aa84 | ||
|  | 695f83d1d8 | ||
|  | ac4dfb3baf | ||
|  | 427001b223 | ||
|  | 3117d8b30d | ||
|  | d19dd2a8b2 | ||
|  | de3dcc3fc2 | ||
|  | 077f3e095b | ||
|  | ad3b0bb320 | ||
|  | 8538741341 | ||
|  | a0aef5d579 | ||
|  | fdd93427aa | ||
|  | ac3f6557de | ||
|  | b0a909150c | ||
|  | 913f163fe4 | ||
|  | 3126b07b33 | ||
|  | 08ca90cf75 | ||
|  | 540ac2a277 | ||
|  | ed80bed066 | ||
|  | 41d2541c6a | ||
|  | 5dedf63498 | ||
|  | 09bc4f41d2 | ||
|  | cebf0b5c57 | ||
|  | 1632a57e3e | ||
|  | 744c4be7d1 | ||
|  | bd99ef3eff | ||
|  | 8a86f13a5d | ||
|  | 7418b2f0ee | ||
|  | a0e9de9312 | ||
|  | 7e23a6f5e8 | ||
|  | 44589f8744 | ||
|  | d24531030f | ||
|  | 25bdab1346 | ||
|  | 41af1c863a | ||
|  | 76b3b18cfb | ||
|  | e6fb2958a9 | ||
|  | 15b75b322f | ||
|  | 86149d1032 | ||
|  | ded142cd9e | ||
|  | 7923eb9ec9 | ||
|  | 132553c108 | ||
|  | c2269fc9a4 | ||
|  | aed30d1499 | ||
|  | 84a1a876e1 | ||
|  | dc675707f9 | ||
|  | d5667c7ef6 | ||
|  | cba1213dd1 | ||
|  | 7219c90957 | ||
|  | af13bd991e | ||
|  | 48e548eb52 | ||
|  | 1a19e27f0e | ||
|  | 0cbd22426d | ||
|  | d5e52e99e0 | ||
|  | f52978e71f | ||
|  | 3a3358124d | ||
|  | 929808c633 | ||
|  | a78df574f3 | ||
|  | 875cad16b6 | ||
|  | 7bc30192ca | ||
|  | a1a8968e98 | ||
|  | 6abb74a038 | ||
|  | 2d7d05e985 | ||
|  | d426e09474 | ||
|  | 72d55cb953 | ||
|  | 73ad865581 | ||
|  | fefb52beb7 | ||
|  | abd503543b | ||
|  | e3eb550581 | ||
|  | 46b780758e | ||
|  | b2c3ee9779 | ||
|  | dca899bcee | ||
|  | 9667b8a948 | ||
|  | 661f225fe7 | ||
|  | 4c6fe0c8de | ||
|  | 78f457950e | ||
|  | d831cc8df2 | ||
|  | 7056406afc | ||
|  | c85cfcf3e6 | ||
|  | db06d06789 | ||
|  | a28b990cd1 | ||
|  | dab4bfa7a6 | ||
|  | 6575236f2b | ||
|  | ad582c8806 | ||
|  | 452e9cb953 | ||
|  | a64f137b39 | ||
|  | c067d6aab0 | ||
|  | 119b9920a6 | ||
|  | 99ed54fce8 | ||
|  | 2ea57cdd38 | ||
|  | bb94bdfdaf | ||
|  | 4de8398cc2 | ||
|  | e6e8cd5d8a | ||
|  | 0b200309ba | ||
|  | a184548912 | ||
|  | c987191212 | ||
|  | 7009b444d9 | ||
|  | 06551d5367 | ||
|  | a20622ac0c | ||
|  | ca38117fca | ||
|  | 9478f78d4f | ||
|  | 5c2397bbae | ||
|  | 92fefef816 | ||
|  | d3ced65524 | ||
|  | 29eb748831 | ||
|  | 76df3d5f33 | ||
|  | 252076ec1f | ||
|  | bbec28591f | ||
|  | 075a360ba6 | ||
|  | 477524a8ae | ||
|  | dfe055732d | ||
|  | 78b611a18d | ||
|  | 367bdf65e6 | ||
|  | 3fc9caa31a | ||
|  | 95a41fcab7 | ||
|  | 58b409fc00 | ||
|  | 3eaaac09ad | ||
|  | bcb672920c | ||
|  | 79b91e25c2 | ||
|  | 7170931464 | ||
|  | c1b5a1a13e | ||
|  | a6265ce8ab | ||
|  | 90109917df | ||
|  | 0acd54c2b7 | ||
|  | c96226b9b4 | ||
|  | 6d143f1624 | ||
|  | 93324d1154 | ||
|  | a39f0e1891 | ||
|  | 822f609a22 | ||
|  | cd7ddd1c61 | ||
|  | 0b63ba26bb | ||
|  | 94d70cdb62 | ||
|  | acb3831c8b | ||
|  | c9d9ecede4 | ||
|  | 4eb5873353 | ||
|  | 7ca39fdb21 | ||
|  | b8d1d7a8c0 | ||
|  | 1af79eab30 | ||
|  | 03be2704ce | ||
|  | 34baea66a7 | ||
|  | 0638d109d0 | ||
|  | 561e228a2d | ||
|  | cb5d856769 | ||
|  | 04fe5d1fc4 | ||
|  | 45e9d4f8de | ||
|  | 73fdbb6202 | ||
|  | e49dbefddd | ||
|  | fc5143337a | ||
|  | 4b3eb6dace | ||
|  | c741b2a819 | ||
|  | cebfaa32bf | ||
|  | d356d39d43 | ||
|  | 7d9f22d3f4 | ||
|  | c6c8f282e2 | ||
|  | 6a64420721 | ||
|  | fcde4e2488 | ||
|  | aa5c4c20e9 | ||
|  | 794e31e487 | ||
|  | 16bf186312 | ||
|  | 45c722e786 | ||
|  | 36d9e5c3fe | ||
|  | 8d614de67f | ||
|  | d17da670ab | ||
|  | 5bf4df9ad8 | ||
|  | 07db6b59ce | ||
|  | e16f1cf4ee | ||
|  | 4c80d929ca | ||
|  | 16364d9859 | ||
|  | c24f6acb2c | ||
|  | 4bd19e0627 | ||
|  | 69d839997a | ||
|  | c02c027f4f | ||
|  | b14606625e | ||
|  | 222d7b56c7 | ||
|  | b7f7bf42b2 | ||
|  | 0cbd64d31a | ||
|  | 60bdae47c4 | ||
|  | ca4b38d905 | ||
|  | 3674465f53 | ||
|  | b951d4130c | ||
|  | 7992b810fd | ||
|  | c1c0afa40b | ||
|  | 56c9026299 | ||
|  | 021ddfc36b | ||
|  | 5bd72f6428 | ||
|  | feabfe54f0 | ||
|  | 565409b486 | ||
|  | f57366da5f | ||
|  | 064217ccb0 | ||
|  | fa3ccbda33 | ||
|  | f43aadf02d | ||
|  | 3b8a4d3e9b | ||
|  | 3d410556ef | ||
|  | f15ca1d0a1 | ||
|  | 7002463c54 | ||
|  | 649f876437 | ||
|  | 3cfd178cbd | ||
|  | cefbaafa19 | ||
|  | a8c88800c4 | ||
|  | 9d1a127200 | ||
|  | 3fdde2d1c8 | ||
|  | cdc0b8dd2c | ||
|  | 1a1e06e6e8 | ||
|  | 6d39b8468c | ||
|  | bdee3947b2 | ||
|  | 2317037655 | ||
|  | dcea6b757b | ||
|  | bd7fe92818 | ||
|  | 850e47d8db | ||
|  | 96fe62400f | ||
|  | 5d07fcdcb6 | ||
|  | fd5d2d57a8 | ||
|  | 8e7d42201f | ||
|  | f26bd3cb31 | ||
|  | 36915cdace | ||
|  | 8a5cecd2a0 | ||
|  | 78da1b22bb | ||
|  | 6d970a9794 | ||
|  | 8bb7739f05 | ||
|  | 7788bb4b33 | ||
|  | 2ecb4bb3b7 | ||
|  | 4a783d3c3c | ||
|  | e16645ae87 | ||
|  | 9d3189be7e | ||
|  | 07fca78293 | ||
|  | 82080501c7 | ||
|  | d93d6bfc66 | ||
|  | a41326ef94 | ||
|  | 90b77845c3 | ||
|  | 57af80d820 | ||
|  | fc4d5a1dfd | ||
|  | 8ab9ab8d21 | ||
|  | 75674b5793 | ||
|  | a7d6f26051 | ||
|  | eb540ce148 | ||
|  | a3077fe43b | ||
|  | 63bb84d375 | ||
|  | e5f5aa628e | ||
|  | c54f84dc8e | ||
|  | c2e562623c | ||
|  | c8d5e8a9dc | ||
|  | 963f017be3 | ||
|  | 0e0eeb736f | ||
|  | e8d9b8fa49 | ||
|  | c166b9242e | ||
|  | 8ff8efced2 | ||
|  | 0b4fb9a806 | ||
|  | ba9fef9410 | ||
|  | f7d94d17cd | ||
|  | 1fea9c6817 | ||
|  | a88c8bedbe | ||
|  | fbf3468053 | ||
|  | 2a3ba9799e | ||
|  | d121aad28f | ||
|  | dc808fa807 | ||
|  | a1be6ff62b | ||
|  | 20dc5b0256 | ||
|  | edd54e23c5 | ||
|  | 1238df8784 | ||
|  | b8c62652b0 | ||
|  | 54b2d02f63 | ||
|  | 47faf89a5c | ||
|  | b7fb5a3854 | ||
|  | a384b4202a | ||
|  | 99ecac0ce4 | ||
|  | 6102982456 | ||
|  | b88e981b4b | ||
|  | 827263b03e | ||
|  | d44e74d334 | ||
|  | 911f46c590 | ||
|  | 7d42c4ee5d | ||
|  | ea89f6177f | ||
|  | 74291b3870 | ||
|  | 2c4f2082fe | ||
|  | d8d58cc29b | ||
|  | 85b17e4035 | ||
|  | 83de5667b3 | ||
|  | 5fffe873c6 | ||
|  | 78c09c82d6 | ||
|  | 704abc315d | ||
|  | 86b4965458 | ||
|  | d2dc0c2bf0 | ||
|  | 9f4894bbb5 | ||
|  | 76a8675a34 | ||
|  | 6988301da1 | ||
|  | 109cd37211 | ||
|  | 284ff4d1b0 | ||
|  | bc0ab7af99 | ||
|  | a17bc7258f | ||
|  | 87911c2438 | ||
|  | 746f1fd300 | ||
|  | 9e5faf919f | ||
|  | cc6cbe6605 | ||
|  | dc6d708897 | ||
|  | 6189d24b98 | ||
|  | f6e28dc88f | ||
|  | 75ea035630 | ||
|  | 4cdb14301d | ||
|  | 9f95221ba3 | ||
|  | e3a67be412 | ||
|  | 5749b642ce | ||
|  | baff7c67f9 | ||
|  | ccc005942f | ||
|  | 5b83c33039 | ||
|  | cc32578c5f | ||
|  | 80f410835b | ||
|  | b537a3145d | ||
|  | bfa1fcbaf8 | ||
|  | 56243907c4 | ||
|  | 5928dd72e6 | ||
|  | c6bf0ff1cd | ||
|  | 19d1cf192b | ||
|  | 37d7dc7e3e | ||
|  | 95a3a194b8 | ||
|  | 3542387188 | ||
|  | da1b002a64 | ||
|  | 46daee28e7 | ||
|  | 9ade5635d4 | ||
|  | e14e80f33c | ||
|  | 0c824e21c8 | ||
|  | fab1c68569 | ||
|  | c1534657f2 | ||
|  | 39841de680 | ||
|  | 43a720b62b | ||
|  | 5ec54de29e | ||
|  | 397e37f344 | ||
|  | b6f84c2b99 | ||
|  | 843f86fc66 | ||
|  | 0e8e364074 | ||
|  | bbccbef578 | ||
|  | ee11a8e3a0 | ||
|  | e8618047bd | ||
|  | f104b76f73 | ||
|  | cb701d8506 | ||
|  | 70a334c56e | ||
|  | e6b2db1e29 | ||
|  | e8dffa0052 | ||
|  | c4f0512f39 | ||
|  | 3268019d0c | ||
|  | a0ef6a1fc8 | ||
|  | 99d0098b20 | ||
|  | a7a54c042c | ||
|  | c44e48a793 | ||
|  | 53b501ca73 | ||
|  | 322f70bcca | ||
|  | 35559c077b | ||
|  | 590ffe7c76 | ||
|  | 8a2d8f148e | ||
|  | 4f0e15e07d | ||
|  | 7463861e0c | ||
|  | 1e70fa28be | ||
|  | 26c6ca470b | ||
|  | 5e54034e0e | ||
|  | 25873ef734 | ||
|  | 1092b04b22 | ||
|  | 01ce74dd72 | ||
|  | 41430d8386 | ||
|  | 01eb19169c | ||
|  | cfaa7d7c68 | ||
|  | 14d3312a10 | ||
|  | 87be478dd8 | ||
|  | 0b6877a20e | ||
|  | 7186f0ef60 | ||
|  | 538933691e | ||
|  | 46c49ddbd8 | ||
|  | bcfb134b6e | ||
|  | 57981f1cf9 | ||
|  | 0310186fb7 | ||
|  | 4dcb38290e | ||
|  | 2f5c37048b | ||
|  | 370c8b16ae | ||
|  | af0555592a | ||
|  | 9c07ddaed6 | ||
|  | bb7355a566 | ||
|  | 1d48347f8c | ||
|  | 060b76ca9c | ||
|  | 2b2b9b6f7a | ||
|  | f3dd05a0c0 | ||
|  | 47a91aa273 | ||
|  | 41bc236603 | ||
|  | 65349451ea | ||
|  | e77b6a55a4 | ||
|  | 2379bcff11 | ||
|  | 7133156fa1 | ||
|  | a59176689d | ||
|  | bc2d8f3dfb | ||
|  | ddf89a9d5a | ||
|  | 7daaba17f6 | ||
|  | 9cb5b1384f | ||
|  | 7d13263482 | ||
|  | d9ff252915 | ||
|  | 51ba550251 | ||
|  | fd21c467ad | ||
|  | 9aa90650b4 | ||
|  | d892257e8b | ||
|  | db0dbcfcf1 | ||
|  | f591996f04 | ||
|  | b08d385586 | ||
|  | 20ef22f67e | ||
|  | c888baf542 | ||
|  | 8b0af3f666 | ||
|  | 7043e1e7c0 | ||
|  | c5854eba23 | ||
|  | ddf1a8cebb | ||
|  | 7dcaf167e9 | ||
|  | b359d51d3a | ||
|  | 3913fa5086 | ||
|  | ab2772abe0 | ||
|  | bc7875b17b | ||
|  | 4938fa9990 | ||
|  | 84df2c80ee | ||
|  | dc17060754 | ||
|  | e2fa81dddc | ||
|  | 182dfc95fe | ||
|  | c8979b6c33 | ||
|  | ab872e8912 | ||
|  | d36b94fabf | ||
|  | e3d4ceaecb | ||
|  | e3a6e5b788 | ||
|  | 57235c0e00 | ||
|  | 2298c3ddaf | ||
|  | 7224f1be6f | ||
|  | 1bd3019c16 | ||
|  | f0fa21dead | ||
|  | 845eaed8d7 | ||
|  | b3649cd4d0 | ||
|  | 55f14c587b | ||
|  | 441a8a8408 | ||
|  | 060c9648f1 | ||
|  | 7680c8733f | ||
|  | 5a0af5c93b | ||
|  | f4b066add1 | ||
|  | 9ecb414b02 | ||
|  | ad4f908c24 | ||
|  | 025f739442 | ||
|  | 6df7354c48 | ||
|  | 3f77c845ca | ||
|  | d4771f7a5c | ||
|  | ec4e2bfa4f | ||
|  | dfdbfae4b5 | ||
|  | 349d38b956 | ||
|  | 2267aa3ac4 | ||
|  | 2323aa454e | ||
|  | 8b3317b665 | ||
|  | 15f893c343 | ||
|  | 309b3e765e | ||
|  | d3fad06e00 | ||
|  | 834f24c99c | ||
|  | 35291e1298 | ||
|  | ac4e9dcbc5 | ||
|  | d57806f2ba | ||
|  | 3b005c317d | ||
|  | e91903fed2 | ||
|  | fee2002b0f | ||
|  | f12e502eb8 | ||
|  | 24e62b1cee | ||
|  | f559ec73e0 | ||
|  | 530b501fcf | ||
|  | d5ea78025e | ||
|  | 3413b9b5b5 | ||
|  | 0b45c1aa76 | ||
|  | 5718d1690a | ||
|  | 67b16cc070 | ||
|  | 5746ac3247 | ||
|  | 8a2c520b11 | ||
|  | f46c14df8c | ||
|  | 009fbba491 | ||
|  | 53d84347c2 | ||
|  | 1961487055 | ||
|  | c9ce5df74b | ||
|  | 1371b6773e | ||
|  | b9f1baf150 | ||
|  | 66b322e844 | ||
|  | 487b65b669 | ||
|  | 9078781d61 | ||
|  | 1ec830521a | ||
|  | c4bf2aae7d | ||
|  | 69ca88d9f8 | ||
|  | b38b7b2534 | ||
|  | f19bfc3b4b | ||
|  | d22f9c09d7 | ||
|  | fc2da9eb42 | ||
|  | f2c9e20aef | ||
|  | 16b8ca2746 | ||
|  | 46ea074821 | ||
|  | d2c89781e2 | ||
|  | e54d711891 | ||
|  | 84d3ad4764 | ||
|  | b908951a2d | ||
|  | 8b87deea58 | ||
|  | 0d7325b3dc | ||
|  | a3fd99a498 | ||
|  | 0ff405d1e0 | ||
|  | 46a60af966 | ||
|  | 591c9e3b39 | ||
|  | c30461b20b | ||
|  | 2c3f86d9bc | ||
|  | 34349e4475 | ||
|  | 6acd5be5dc | ||
|  | 55a2b4e789 | ||
|  | f41397eb43 | ||
|  | 41fc1e8f82 | ||
|  | bee219ebf7 | ||
|  | 438f602961 | ||
|  | 429e72e681 | ||
|  | 7a134781f2 | ||
|  | b572c1dcd3 | ||
|  | 95593f847b | ||
|  | b82fcbd97b | ||
|  | daddee7806 | ||
|  | 930a08ec90 | ||
|  | fd2edf3b23 | ||
|  | 0597255c08 | ||
|  | 955ab38a85 | ||
|  | 1311a0db8b | ||
|  | 0ce9ee6a6c | ||
|  | 3a339382d4 | ||
|  | a5b15bbc16 | ||
|  | fbf89fd514 | ||
|  | b3223feba2 | ||
|  | 88a9bc379e | ||
|  | b442b91b7c | ||
|  | 9fadbbe087 | ||
|  | 1ef7239276 | ||
|  | ea573e9434 | ||
|  | 34fa24e4a8 | ||
|  | a1be4a4d8a | ||
|  | b8e8af1e2a | ||
|  | c13a3fb30c | ||
|  | cb8fa4e1f4 | ||
|  | bf7f4f9887 | ||
|  | af48548e81 | ||
|  | 90d58ec8fa | ||
|  | e92dd7f464 | ||
|  | 3bdf9eeed2 | ||
|  | 558ac7b0da | ||
|  | 9d0488ffbc | ||
|  | d7fa8b283e | ||
|  | a0097bd613 | ||
|  | ffc2156e5f | ||
|  | e0a89bb5fe | ||
|  | 647179cd3c | ||
|  | 5106ccdbd7 | ||
|  | 7103098fe7 | ||
|  | f8072f0bfc | ||
|  | 96ac3a95c8 | ||
|  | cd713dc40f | ||
|  | d9fba39d80 | ||
|  | 2564470197 | ||
|  | 9222c82af0 | ||
|  | 243f283bfd | ||
|  | 5b60aaecc0 | ||
|  | 20a4caec60 | ||
|  | 99cc096b71 | ||
|  | 5626d1c56d | ||
|  | 68c9c4ec3c | ||
|  | f9d4a43e05 | ||
|  | 92e7f344e0 | ||
|  | 89ce2838d5 | ||
|  | 356b217692 | ||
|  | 950e39b753 | ||
|  | 8f14979717 | ||
|  | aa2afd162e | ||
|  | fe33352ec1 | ||
|  | 65c5249815 | ||
|  | b1afaea1aa | ||
|  | 997dc3814b | ||
|  | b37b5b86d4 | ||
|  | b13a4e1016 | ||
|  | 7897ebc4d5 | ||
|  | ac17b82d85 | ||
|  | 1b1712d998 | ||
|  | a2c0d9f7d0 | ||
|  | 5b68b25c85 | ||
|  | d3a215b575 | ||
|  | 5c352a0d3e | ||
|  | fded058ea6 | ||
|  | 99f041b114 | ||
|  | 283b594995 | ||
|  | 723aa65e7a | ||
|  | 64d315ad51 | ||
|  | d0844356cb | ||
|  | ba8d65835a | ||
|  | fa3343f437 | ||
|  | c5b8a951d2 | ||
|  | 20b1fc05cb | ||
|  | ab441d7d0c | ||
|  | b621d14bdf | ||
|  | 94730e998b | ||
|  | 23c2f76e52 | ||
|  | 40196d48b2 | ||
|  | ef3c2eb701 | ||
|  | 4f994a2795 | ||
|  | 807e575dac | ||
|  | 04b1465eb7 | ||
|  | 6f79ab2a70 | ||
|  | c1469f016e | ||
|  | 373ec934df | ||
|  | abd34ba1dc | ||
|  | 89b7596caf | ||
|  | 3543548ba0 | ||
|  | a932965908 | ||
|  | 9056126328 | ||
|  | 0e85a5123d | ||
|  | d3f19db42d | ||
|  | 9894d16d26 | ||
|  | 0b069bcb58 | ||
|  | 36d54c3fac | ||
|  | 530e48f16e | ||
|  | 9763f9f922 | ||
|  | bbd4d7a8ef | ||
|  | bafe2ece8c | ||
|  | b2449eb726 | ||
|  | 353c345d9a | ||
|  | e2461ba839 | ||
|  | e199fdd2b6 | ||
|  | 592a89d6a5 | ||
|  | 7a7b629225 | ||
|  | 21a4774561 | ||
|  | 5be97bb18f | ||
|  | a12ff10550 | ||
|  | c808294ca1 | ||
|  | 9dcf264658 | ||
|  | e0bbd3a810 | ||
|  | 2886a22f4e | ||
|  | 6f783f7662 | ||
|  | 992fdc9e27 | ||
|  | 73529c31e0 | ||
|  | d9fc91a432 | ||
|  | 6a432e7931 | ||
|  | 26f7575ba2 | ||
|  | b1c1bbd6c0 | ||
|  | d40643af54 | ||
|  | 11cfefd908 | ||
|  | ff2b2eec9b | ||
|  | 4f1187bf6e | ||
|  | 642539e410 | ||
|  | 1f774e0d71 | ||
|  | 1da19cde6f | ||
|  | ac5973833e | ||
|  | 40b0e31d27 | ||
|  | f56f8d72df | ||
|  | b47bb13558 | ||
|  | b4133b6512 | ||
|  | fb20095502 | ||
|  | cfc23c4cb9 | ||
|  | 44701f1633 | ||
|  | fadf799b9c | ||
|  | c22a9784ee | ||
|  | a6512d3d74 | ||
|  | cea2ca7532 | ||
|  | e322069bb4 | ||
|  | da7a976c4e | ||
|  | 300dba7257 | ||
|  | ec59f80fe3 | ||
|  | 37aa5bcc60 | ||
|  | e50d2cb481 | ||
|  | 468709c092 | ||
|  | 11ced9216c | ||
|  | cfa9151f45 | ||
|  | 6577224a55 | ||
|  | b4209f2e72 | ||
|  | f045e4ea69 | ||
|  | 4a37152aea | ||
|  | 2907db1380 | ||
|  | 80a35692c5 | ||
|  | 1a6fe5ca3c | ||
|  | 13ec3493bd | ||
|  | bf55e8df72 | ||
|  | 775504d812 | ||
|  | 8d6c45b68e | ||
|  | db9094956e | ||
|  | 25d02e92f4 | ||
|  | 81cb0a38f3 | ||
|  | e07a9d6162 | ||
|  | 2ccbc16dfa | ||
|  | e00addc0b0 | ||
|  | da7a2cf0c0 | ||
|  | 2368788405 | ||
|  | f603415931 | ||
|  | 523fa42998 | ||
|  | e449395f3f | ||
|  | d8d8002f1e | ||
|  | 2570ca9573 | ||
|  | e5fdc2cbfd | ||
|  | 0349cdbc1b | ||
|  | 122f0309a6 | ||
|  | 09bff5ea4e | ||
|  | 7ea112c5e7 | ||
|  | 44df07a5f5 | ||
|  | 66b0d9d309 | ||
|  | 6ac3d3e62c | ||
|  | 925450f84c | ||
|  | 62f59c6a19 | ||
|  | 7db21612a0 | ||
|  | 2c0da2cf26 | ||
|  | 79484cc194 | ||
|  | 6f18748c72 | ||
|  | 577824930f | ||
|  | d614519ee7 | ||
|  | ae31041f7f | ||
|  | 62c4d0cf86 | ||
|  | c2ddabbad2 | ||
|  | 458402aaff | ||
|  | 5c81e98218 | ||
|  | 37a46b02f4 | ||
|  | b3e1ecdd02 | ||
|  | 1780e6dc61 | ||
|  | 50f346d092 | ||
|  | ccc851090a | ||
|  | 4605d84cc8 | ||
|  | 8c7ab50325 | ||
|  | 908539836b | ||
|  | 9f71cf966c | ||
|  | 02ed47c578 | ||
|  | 1ddbaf0884 | ||
|  | d3ed8c6f0f | ||
|  | 4f1ac2ac6f | ||
|  | 1e733f4c8b | ||
|  | 8e2546da9d | ||
|  | 3a8162d3c5 | ||
|  | f7ceb75316 | ||
|  | 744e193faa | ||
|  | 12b0e11592 | ||
|  | 717f3a9e3d | ||
|  | b9f0682f04 | ||
|  | 8792465fd5 | ||
|  | 6fbf9a119d | ||
|  | 0dfa21a92e | ||
|  | 136fe8e8eb | ||
|  | d510c4e31d | ||
|  | c066bcc4ce | ||
|  | c9e7ae1f08 | ||
|  | 6a9b4f4d55 | ||
|  | 2b5054b905 | ||
|  | 0a45a2485b | ||
|  | fcc0294d07 | ||
|  | ad981c2bf0 | ||
|  | 75a32b2f94 | ||
|  | 70b60f756b | ||
|  | 0d2ae8ae23 | ||
|  | 8043c86942 | ||
|  | 4c30a7bc55 | ||
|  | f615b9c252 | ||
|  | c19b36a391 | ||
|  | 935634e487 | ||
|  | 2c3f032a2b | ||
|  | 7e62b75b12 | ||
|  | de57ab0874 | ||
|  | 6fb4aaecd3 | ||
|  | 45fdbf5a11 | ||
|  | c6615a7b17 | ||
|  | 0efb3d2dcf | ||
|  | b8a58f83ee | ||
|  | 110228e65e | ||
|  | 8ad27e0eda | ||
|  | 2e0d90c685 | ||
|  | bd2ecb13b8 | ||
|  | 5725570dbb | ||
|  | 11f77685e4 | ||
|  | 0521c46d27 | ||
|  | 50d6225590 | ||
|  | df55f7de79 | ||
|  | 5152ae9622 | ||
|  | 075d0da63d | ||
|  | d804df2a2f | ||
|  | ff0f8beb81 | ||
|  | c00be92f97 | ||
|  | 88f6221424 | ||
|  | f9463e02a2 | ||
|  | 25a23801be | ||
|  | fe7bb02dc5 | ||
|  | 68edcfc4e8 | ||
|  | 5f8a24a684 | ||
|  | 0a5d62605a | ||
|  | 1873be8d95 | ||
|  | 01892c3828 | ||
|  | b87e60c72f | ||
|  | 3a083f88b5 | ||
|  | 566bb2f097 | ||
|  | 1ba7847d84 | ||
|  | c32044a8eb | ||
|  | 72a2d417af | ||
|  | 09c18d6d44 | ||
|  | 84ae6a633e | ||
|  | 82749cea07 | ||
|  | 23aa0e3ba3 | ||
|  | 8be27a2201 | ||
|  | ff98f3cc3e | ||
|  | 01c4d25646 | ||
|  | 292b9ac9d0 | ||
|  | 6bdae03961 | ||
|  | 7426c6aac3 | ||
|  | 211526c032 | ||
|  | e6fe08dd61 | ||
|  | 7bba67130a | ||
|  | 7186d8ddfd | ||
|  | 1a6bc6decd | ||
|  | 5b11c86113 | ||
|  | 98b95ab891 | ||
|  | c3068d10bf | ||
|  | fa1a1b084b | ||
|  | 387e44b8b9 | ||
|  | 6dafa89a15 | ||
|  | 5b5b8008b0 | ||
|  | 38a955e663 | ||
|  | 62921df702 | ||
|  | c7c2b85882 | ||
|  | bc26ee5cde | ||
|  | 9eca31529c | ||
|  | 25e3abeeb8 | ||
|  | 53d6281ba4 | ||
|  | 4b9fd949ad | ||
|  | 786b4c18a1 | ||
|  | 97b65ac44c | ||
|  | 102da7b21e | ||
|  | 85bde79fd1 | ||
|  | 09a25957d0 | ||
|  | fd7a2181a4 | ||
|  | 2ede3b420b | ||
|  | 4bed30347d | ||
|  | ffdcab3220 | ||
|  | 956108399b | ||
|  | 61c38f2a99 | ||
|  | f3773ebfc2 | ||
|  | f963ac63f1 | ||
|  | 1368aafe5f | ||
|  | 657262f179 | ||
|  | 8b9dce70bb | ||
|  | 30bbd0b3a4 | ||
|  | d4488f041b | ||
|  | fa8dc1ae4b | ||
|  | c2b60edca3 | ||
|  | 949ca4f79e | ||
|  | ab0b03dd14 | ||
|  | 5b41e58025 | ||
|  | 88bf76fa27 | ||
|  | 3ad155882a | ||
|  | 4747e28621 | ||
|  | 5664695a92 | ||
|  | fdcd31652a | ||
|  | e5397b6659 | ||
|  | 51e5b9a994 | ||
|  | dc95632834 | ||
|  | 3e888382c9 | ||
|  | de8d6f8439 | ||
|  | 60543b8f1d | ||
|  | 268cec6d08 | ||
|  | 94aea91927 | ||
|  | 135a6993aa | ||
|  | 16079f496a | ||
|  | e318e8e9cf | ||
|  | 51ca8277bb | ||
|  | a49cf1fd3d | ||
|  | 81a11ee5b4 | ||
|  | b778424b7e | ||
|  | d408d7cc20 | ||
|  | 228870ceac | ||
|  | ae1939cd1b | ||
|  | f7a4bd5d12 | ||
|  | eec1888f87 | ||
|  | a42470e5b4 | ||
|  | 098f1fe0f6 | ||
|  | 2e5bc750d1 | ||
|  | d777a1f2b8 | ||
|  | 5178e19cea | ||
|  | be8aaa68af | ||
|  | 1e31a1184a | ||
|  | c269be7f07 | ||
|  | 6bf42ba237 | ||
|  | 1901648a05 | ||
|  | 789a6cebcd | ||
|  | 4230349c07 | ||
|  | 33b95b9371 | ||
|  | e47110607c | ||
|  | 1e3665e54f | ||
|  | 47147066d2 | ||
|  | 5b8f67e992 | ||
|  | fb1a66d872 | ||
|  | e594b9304a | ||
|  | 0d7fd36c38 | ||
|  | bdba786322 | ||
|  | 507e0fb54c | ||
|  | e4d91aa337 | ||
|  | 4e6fc8e2a2 | ||
|  | 244ffb2450 | ||
|  | 7aa3aef508 | ||
|  | c16f7d214f | ||
|  | c08d44ea48 | ||
|  | 6381d04e2b | ||
|  | ec43d10e35 | ||
|  | b32d9aab34 | ||
|  | de5cb4c165 | ||
|  | 609edb9dff | ||
|  | 636b3921fa | ||
|  | a391d731ff | ||
|  | c743b0c66b | ||
|  | ef09f88816 | ||
|  | ffeada037d | ||
|  | 4723d9dd30 | ||
|  | b84604a4db | ||
|  | 1bd1a9cba3 | ||
|  | d0c830c560 | ||
|  | 06d3cc3506 | ||
|  | 2b90c20db8 | ||
|  | ebe1fd6142 | ||
|  | ca8f153c6a | ||
|  | 581e5d7330 | ||
|  | 067d160c13 | ||
|  | e8890ada7c | ||
|  | c5fbf6ec55 | ||
|  | 5cd9793edf | ||
|  | c60b5e5c21 | ||
|  | b2bd9301b6 | ||
|  | 4864ecc0c7 | ||
|  | 58dea55d38 | ||
|  | 34e22e0747 | ||
|  | 7c9f74f550 | ||
|  | f0517aee53 | ||
|  | f69072d293 | ||
|  | 669aedeea3 | ||
|  | 8a4985261a | ||
|  | 337d14e71e | ||
|  | ebf4b00288 | ||
|  | a445bc53cd | ||
|  | 1f7ceb6df6 | ||
|  | 135b9fc010 | ||
|  | 655d03bec4 | ||
|  | bc50d25468 | ||
|  | e40bb81d80 | ||
|  | 53e972fbba | ||
|  | 51d244cfe6 | ||
|  | 3842552256 | ||
|  | c9d5d74662 | ||
|  | 4961b1f715 | ||
|  | 680012056b | ||
|  | 64ec0cf62e | ||
|  | c4f6366642 | ||
|  | 28021aa711 | ||
|  | bf5a15077d | ||
|  | 9506b37200 | ||
|  | ee41eadcd9 | ||
|  | 5ecc1929f9 | ||
|  | 1186359898 | ||
|  | aabf73d3e9 | ||
|  | da4e813d9a | ||
|  | cbcadb6706 | ||
|  | 9f0b4564cf | ||
|  | 327b0b4a37 | ||
|  | 77695409f6 | ||
|  | 92cdec2877 | ||
|  | 4804f419ef | ||
|  | 0c52c85e25 | ||
|  | 5ca1367a7c | ||
|  | 68acd52c86 | ||
|  | bd221a59d6 | ||
|  | b91a938a60 | ||
|  | 698c1f6c7e | ||
|  | 2f110ab9a8 | ||
|  | a1dfb3a99e | ||
|  | b2a301bf94 | ||
|  | 3b3f9ee497 | 
							
								
								
									
										30
									
								
								.ci/all.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								.ci/all.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| #!/usr/bin/env bash | ||||
|  | ||||
| # | ||||
| # all.sh | ||||
| # Copyright (c) 2024 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/>. | ||||
| # | ||||
|  | ||||
| SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" | ||||
|  | ||||
| echo "Running PHP CS Fixer" | ||||
| $SCRIPT_DIR/phpcs.sh | ||||
| echo "Running PHPStan" | ||||
| $SCRIPT_DIR/phpstan.sh | ||||
| echo "Running PHPMD" | ||||
| $SCRIPT_DIR/phpmd.sh | ||||
| @@ -19,6 +19,8 @@ | ||||
|  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| 
 | ||||
| use PhpCsFixer\Runner\Parallel\ParallelConfigFactory; | ||||
| 
 | ||||
| $current = __DIR__; | ||||
| 
 | ||||
| $paths = [ | ||||
| @@ -35,16 +37,40 @@ $finder = PhpCsFixer\Finder::create() | ||||
| 
 | ||||
| 
 | ||||
| $config = new PhpCsFixer\Config(); | ||||
| return $config->setRules([ | ||||
|                              '@PHP83Migration'             => true, | ||||
|                              '@PhpCsFixer:risky'           => true, | ||||
|                              '@PSR12:risky'                => true, | ||||
|                              'declare_strict_types'        => true, | ||||
|                              'strict_param'                => true, | ||||
|                              'comment_to_phpdoc'           => false, // breaks phpstan lines in combination with PHPStorm.
 | ||||
|                              'array_syntax'                => ['syntax' => 'short'], | ||||
|                              'native_function_invocation'  => false, // annoying
 | ||||
|                              'php_unit_data_provider_name' => false, // bloody annoying long test names
 | ||||
|                              'static_lambda'               => false, // breaks the Response macro for API's.
 | ||||
|                          ]) | ||||
| $config->setParallelConfig(ParallelConfigFactory::detect()); | ||||
| return $config->setRules( | ||||
|     [ | ||||
|         // rule sets
 | ||||
|         '@PHP83Migration'               => true, | ||||
|         '@PhpCsFixer'                   => true, | ||||
|         '@PhpCsFixer:risky'             => true, | ||||
|         '@PSR12'                        => true, | ||||
|         '@PSR12:risky'                  => true, | ||||
|         'declare_strict_types'          => true, | ||||
|         'strict_param'                  => true, | ||||
|         'no_unused_imports'             => true, | ||||
|         'single_space_around_construct' => true, | ||||
|         'statement_indentation'         => true, | ||||
|         'void_return'                   => true, | ||||
| 
 | ||||
|         // disabled rules
 | ||||
|         'native_function_invocation'    => false, // annoying
 | ||||
|         'php_unit_data_provider_name'   => false, // bloody annoying long test names
 | ||||
|         'static_lambda'                 => false, // breaks the Response macro for API's.
 | ||||
|         'phpdoc_summary'                => false, // annoying.
 | ||||
|         'comment_to_phpdoc'             => false, // breaks phpstan lines in combination with PHPStorm.
 | ||||
|         'type_declaration_spaces'       => false, | ||||
|         'cast_spaces'                   => false, | ||||
| 
 | ||||
|         // complex rules
 | ||||
|         'array_syntax'                  => ['syntax' => 'short'], | ||||
|         'binary_operator_spaces'        => [ | ||||
|             'default'   => 'at_least_single_space', | ||||
|             'operators' => [ | ||||
|                 '=>'  => 'align_single_space_by_scope', | ||||
|                 '='   => 'align_single_space_minimal_by_scope', | ||||
|                 '??=' => 'align_single_space_minimal_by_scope', | ||||
|             ], | ||||
|         ], | ||||
|     ]) | ||||
|               ->setFinder($finder); | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| { | ||||
|   "require": { | ||||
|     "friendsofphp/php-cs-fixer": "^3.12" | ||||
|   } | ||||
|     "require": { | ||||
|         "friendsofphp/php-cs-fixer": "^3.12" | ||||
|     } | ||||
| } | ||||
|   | ||||
							
								
								
									
										1085
									
								
								.ci/php-cs-fixer/composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1085
									
								
								.ci/php-cs-fixer/composer.lock
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										19
									
								
								.ci/phpcs.sh
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								.ci/phpcs.sh
									
									
									
									
									
								
							| @@ -20,23 +20,8 @@ | ||||
| # along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| # | ||||
|  | ||||
| # Install composer packages | ||||
| #composer install --no-scripts --no-ansi | ||||
|  | ||||
| SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" | ||||
|  | ||||
| # enable test .env file. | ||||
| # cp .ci/.env.ci .env | ||||
|  | ||||
| OUTPUT_FORMAT=txt | ||||
| EXTRA_PARAMS="-v" | ||||
|  | ||||
| if [[ $GITHUB_ACTIONS = "true" ]] | ||||
| then | ||||
|     OUTPUT_FORMAT=gitlab | ||||
|     EXTRA_PARAMS="--diff --dry-run" | ||||
| fi | ||||
|  | ||||
| # clean up php code | ||||
| cd $SCRIPT_DIR/php-cs-fixer | ||||
| composer update --quiet | ||||
| @@ -44,8 +29,8 @@ 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 \ | ||||
|     --format=$OUTPUT_FORMAT \ | ||||
|     --allow-risky=yes $EXTRA_PARAMS | ||||
|     --format=txt \ | ||||
|     --allow-risky=yes | ||||
|  | ||||
| EXIT_CODE=$? | ||||
|  | ||||
|   | ||||
| @@ -44,8 +44,7 @@ EXIT_CODE=$? | ||||
|  | ||||
| cd $SCRIPT_DIR/.. | ||||
|  | ||||
| echo "Exit code is $EXIT_CODE, but we ignore this for the time being." | ||||
| echo "Exit code is $EXIT_CODE." | ||||
|  | ||||
| # for the time being, exit 0 | ||||
| #exit $EXIT_CODE | ||||
| exit 0 | ||||
| exit $EXIT_CODE | ||||
|   | ||||
							
								
								
									
										148
									
								
								.ci/phpmd/composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										148
									
								
								.ci/phpmd/composer.lock
									
									
									
										generated
									
									
									
								
							| @@ -9,16 +9,16 @@ | ||||
|     "packages-dev": [ | ||||
|         { | ||||
|             "name": "composer/pcre", | ||||
|             "version": "3.1.1", | ||||
|             "version": "3.1.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/composer/pcre.git", | ||||
|                 "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" | ||||
|                 "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", | ||||
|                 "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", | ||||
|                 "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", | ||||
|                 "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -60,7 +60,7 @@ | ||||
|             ], | ||||
|             "support": { | ||||
|                 "issues": "https://github.com/composer/pcre/issues", | ||||
|                 "source": "https://github.com/composer/pcre/tree/3.1.1" | ||||
|                 "source": "https://github.com/composer/pcre/tree/3.1.3" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -76,20 +76,20 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2023-10-11T07:11:09+00:00" | ||||
|             "time": "2024-03-19T10:26:25+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "composer/xdebug-handler", | ||||
|             "version": "3.0.3", | ||||
|             "version": "3.0.4", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/composer/xdebug-handler.git", | ||||
|                 "reference": "ced299686f41dce890debac69273b47ffe98a40c" | ||||
|                 "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", | ||||
|                 "reference": "ced299686f41dce890debac69273b47ffe98a40c", | ||||
|                 "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", | ||||
|                 "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -100,7 +100,7 @@ | ||||
|             "require-dev": { | ||||
|                 "phpstan/phpstan": "^1.0", | ||||
|                 "phpstan/phpstan-strict-rules": "^1.1", | ||||
|                 "symfony/phpunit-bridge": "^6.0" | ||||
|                 "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "autoload": { | ||||
| @@ -124,9 +124,9 @@ | ||||
|                 "performance" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "irc": "irc://irc.freenode.org/composer", | ||||
|                 "irc": "ircs://irc.libera.chat:6697/composer", | ||||
|                 "issues": "https://github.com/composer/xdebug-handler/issues", | ||||
|                 "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" | ||||
|                 "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -142,20 +142,20 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2022-02-25T21:32:43+00:00" | ||||
|             "time": "2024-03-26T18:29:49+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "pdepend/pdepend", | ||||
|             "version": "2.16.0", | ||||
|             "version": "2.16.2", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/pdepend/pdepend.git", | ||||
|                 "reference": "8dfc0c46529e2073fa97986552f80646eedac562" | ||||
|                 "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/pdepend/pdepend/zipball/8dfc0c46529e2073fa97986552f80646eedac562", | ||||
|                 "reference": "8dfc0c46529e2073fa97986552f80646eedac562", | ||||
|                 "url": "https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58", | ||||
|                 "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -168,7 +168,6 @@ | ||||
|             "require-dev": { | ||||
|                 "easy-doc/easy-doc": "0.0.0|^1.2.3", | ||||
|                 "gregwar/rst": "^1.0", | ||||
|                 "phpunit/phpunit": "^4.8.36|^5.7.27", | ||||
|                 "squizlabs/php_codesniffer": "^2.0.0" | ||||
|             }, | ||||
|             "bin": [ | ||||
| @@ -198,7 +197,7 @@ | ||||
|             ], | ||||
|             "support": { | ||||
|                 "issues": "https://github.com/pdepend/pdepend/issues", | ||||
|                 "source": "https://github.com/pdepend/pdepend/tree/2.16.0" | ||||
|                 "source": "https://github.com/pdepend/pdepend/tree/2.16.2" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -206,26 +205,26 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2023-11-29T08:52:35+00:00" | ||||
|             "time": "2023-12-17T18:09:59+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "phpmd/phpmd", | ||||
|             "version": "2.14.1", | ||||
|             "version": "2.15.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/phpmd/phpmd.git", | ||||
|                 "reference": "442fc2c34edcd5198b442d8647c7f0aec3afabe8" | ||||
|                 "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/phpmd/phpmd/zipball/442fc2c34edcd5198b442d8647c7f0aec3afabe8", | ||||
|                 "reference": "442fc2c34edcd5198b442d8647c7f0aec3afabe8", | ||||
|                 "url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0", | ||||
|                 "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", | ||||
|                 "ext-xml": "*", | ||||
|                 "pdepend/pdepend": "^2.15.1", | ||||
|                 "pdepend/pdepend": "^2.16.1", | ||||
|                 "php": ">=5.3.9" | ||||
|             }, | ||||
|             "require-dev": { | ||||
| @@ -234,7 +233,6 @@ | ||||
|                 "ext-simplexml": "*", | ||||
|                 "gregwar/rst": "^1.0", | ||||
|                 "mikey179/vfsstream": "^1.6.8", | ||||
|                 "phpunit/phpunit": "^4.8.36 || ^5.7.27", | ||||
|                 "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2" | ||||
|             }, | ||||
|             "bin": [ | ||||
| @@ -282,7 +280,7 @@ | ||||
|             "support": { | ||||
|                 "irc": "irc://irc.freenode.org/phpmd", | ||||
|                 "issues": "https://github.com/phpmd/phpmd/issues", | ||||
|                 "source": "https://github.com/phpmd/phpmd/tree/2.14.1" | ||||
|                 "source": "https://github.com/phpmd/phpmd/tree/2.15.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -290,7 +288,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2023-09-28T13:07:44+00:00" | ||||
|             "time": "2023-12-11T08:22:20+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "psr/container", | ||||
| @@ -397,16 +395,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/config", | ||||
|             "version": "v7.0.0", | ||||
|             "version": "v7.0.4", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/config.git", | ||||
|                 "reference": "8789646600f4e7e451dde9e1dc81cfa429f3857a" | ||||
|                 "reference": "44deeba7233f08f383185ffa37dace3b3bc87364" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/config/zipball/8789646600f4e7e451dde9e1dc81cfa429f3857a", | ||||
|                 "reference": "8789646600f4e7e451dde9e1dc81cfa429f3857a", | ||||
|                 "url": "https://api.github.com/repos/symfony/config/zipball/44deeba7233f08f383185ffa37dace3b3bc87364", | ||||
|                 "reference": "44deeba7233f08f383185ffa37dace3b3bc87364", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -452,7 +450,7 @@ | ||||
|             "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/config/tree/v7.0.0" | ||||
|                 "source": "https://github.com/symfony/config/tree/v7.0.4" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -468,20 +466,20 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2023-11-09T08:30:23+00:00" | ||||
|             "time": "2024-02-26T07:52:39+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/dependency-injection", | ||||
|             "version": "v7.0.1", | ||||
|             "version": "v7.0.4", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/dependency-injection.git", | ||||
|                 "reference": "f6667642954bce638733f254c39e5b5700b47ba4" | ||||
|                 "reference": "47f37af245df8457ea63409fc242b3cc825ce5eb" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f6667642954bce638733f254c39e5b5700b47ba4", | ||||
|                 "reference": "f6667642954bce638733f254c39e5b5700b47ba4", | ||||
|                 "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/47f37af245df8457ea63409fc242b3cc825ce5eb", | ||||
|                 "reference": "47f37af245df8457ea63409fc242b3cc825ce5eb", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -532,7 +530,7 @@ | ||||
|             "description": "Allows you to standardize and centralize the way objects are constructed in your application", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/dependency-injection/tree/v7.0.1" | ||||
|                 "source": "https://github.com/symfony/dependency-injection/tree/v7.0.4" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -548,7 +546,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2023-12-01T15:10:06+00:00" | ||||
|             "time": "2024-02-22T20:27:20+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/deprecation-contracts", | ||||
| @@ -619,16 +617,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/filesystem", | ||||
|             "version": "v7.0.0", | ||||
|             "version": "v7.0.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/filesystem.git", | ||||
|                 "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7" | ||||
|                 "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7", | ||||
|                 "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7", | ||||
|                 "url": "https://api.github.com/repos/symfony/filesystem/zipball/2890e3a825bc0c0558526c04499c13f83e1b6b12", | ||||
|                 "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -662,7 +660,7 @@ | ||||
|             "description": "Provides basic utilities for the filesystem", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/filesystem/tree/v7.0.0" | ||||
|                 "source": "https://github.com/symfony/filesystem/tree/v7.0.3" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -678,20 +676,20 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2023-07-27T06:33:22+00:00" | ||||
|             "time": "2024-01-23T15:02:46+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/polyfill-ctype", | ||||
|             "version": "v1.28.0", | ||||
|             "version": "v1.29.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/polyfill-ctype.git", | ||||
|                 "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" | ||||
|                 "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", | ||||
|                 "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", | ||||
|                 "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", | ||||
|                 "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -705,9 +703,6 @@ | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-main": "1.28-dev" | ||||
|                 }, | ||||
|                 "thanks": { | ||||
|                     "name": "symfony/polyfill", | ||||
|                     "url": "https://github.com/symfony/polyfill" | ||||
| @@ -744,7 +739,7 @@ | ||||
|                 "portable" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" | ||||
|                 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -760,20 +755,20 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2023-01-26T09:26:14+00:00" | ||||
|             "time": "2024-01-29T20:11:03+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/polyfill-mbstring", | ||||
|             "version": "v1.28.0", | ||||
|             "version": "v1.29.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/polyfill-mbstring.git", | ||||
|                 "reference": "42292d99c55abe617799667f454222c54c60e229" | ||||
|                 "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", | ||||
|                 "reference": "42292d99c55abe617799667f454222c54c60e229", | ||||
|                 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", | ||||
|                 "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -787,9 +782,6 @@ | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-main": "1.28-dev" | ||||
|                 }, | ||||
|                 "thanks": { | ||||
|                     "name": "symfony/polyfill", | ||||
|                     "url": "https://github.com/symfony/polyfill" | ||||
| @@ -827,7 +819,7 @@ | ||||
|                 "shim" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" | ||||
|                 "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -843,25 +835,25 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2023-07-28T09:04:16+00:00" | ||||
|             "time": "2024-01-29T20:11:03+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/service-contracts", | ||||
|             "version": "v3.4.0", | ||||
|             "version": "v3.4.1", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/service-contracts.git", | ||||
|                 "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" | ||||
|                 "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", | ||||
|                 "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", | ||||
|                 "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", | ||||
|                 "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": ">=8.1", | ||||
|                 "psr/container": "^2.0" | ||||
|                 "psr/container": "^1.1|^2.0" | ||||
|             }, | ||||
|             "conflict": { | ||||
|                 "ext-psr": "<1.1|>=2" | ||||
| @@ -909,7 +901,7 @@ | ||||
|                 "standards" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" | ||||
|                 "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -925,20 +917,20 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2023-07-30T20:28:31+00:00" | ||||
|             "time": "2023-12-26T14:02:43+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/var-exporter", | ||||
|             "version": "v7.0.1", | ||||
|             "version": "v7.0.4", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/var-exporter.git", | ||||
|                 "reference": "a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3" | ||||
|                 "reference": "dfb0acb6803eb714f05d97dd4c5abe6d5fa9fe41" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/var-exporter/zipball/a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3", | ||||
|                 "reference": "a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3", | ||||
|                 "url": "https://api.github.com/repos/symfony/var-exporter/zipball/dfb0acb6803eb714f05d97dd4c5abe6d5fa9fe41", | ||||
|                 "reference": "dfb0acb6803eb714f05d97dd4c5abe6d5fa9fe41", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -983,7 +975,7 @@ | ||||
|                 "serialize" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/var-exporter/tree/v7.0.1" | ||||
|                 "source": "https://github.com/symfony/var-exporter/tree/v7.0.4" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -999,7 +991,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2023-11-30T11:38:21+00:00" | ||||
|             "time": "2024-02-26T10:35:24+00:00" | ||||
|         } | ||||
|     ], | ||||
|     "aliases": [], | ||||
|   | ||||
| @@ -19,9 +19,9 @@ | ||||
|   ~ along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|   --> | ||||
|  | ||||
| <ruleset name="pcsg-generated-ruleset" | ||||
| <ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          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>Firefly III ruleset.</description> | ||||
| @@ -37,14 +37,14 @@ | ||||
|  | ||||
|     <rule ref="rulesets/design.xml/NumberOfChildren"> | ||||
|         <properties> | ||||
|             <!-- TODO we want to be at minimum 15. But we start high, and drop the bar slowly. --> | ||||
|             <property name="minimum" value="256"/> | ||||
|             <!-- This is now at 32, which excludes the controllers but should prevent more monoliths. --> | ||||
|             <property name="minimum" value="32"/> | ||||
|         </properties> | ||||
|     </rule> | ||||
|     <rule ref="rulesets/design.xml/CouplingBetweenObjects"> | ||||
|         <properties> | ||||
|             <!-- TODO we want to be at maximum 13. But we start high, and drop the bar slowly. --> | ||||
|             <property name="maximum" value="256"/> | ||||
|             <!-- Leaving this at 28 excuses most current code but it can't get worse than that. --> | ||||
|             <property name="maximum" value="28"/> | ||||
|         </properties> | ||||
|     </rule> | ||||
|  | ||||
| @@ -58,20 +58,21 @@ | ||||
|     <!-- code size --> | ||||
|     <rule ref="rulesets/codesize.xml/CyclomaticComplexity"> | ||||
|         <properties> | ||||
|             <!-- TODO we want to be at report level 5. But we start high, and drop the bar slowly. --> | ||||
|             <property name="reportLevel" value="500"/> | ||||
|             <!-- Leave at 20. This means methods will be pretty complex before the system starts complaining. --> | ||||
|             <property name="reportLevel" value="20"/> | ||||
|         </properties> | ||||
|     </rule> | ||||
|     <rule ref="rulesets/codesize.xml/NPathComplexity"> | ||||
|         <properties> | ||||
|             <!-- TODO we want to be at a value of 128. But we start high, and drop the bar slowly. --> | ||||
|             <property name="minimum" value="24062500"/> | ||||
|             <!-- 2000 results in some pretty complex methods, but it's OK. --> | ||||
|             <!-- They should not be much more complex than that though --> | ||||
|             <property name="minimum" value="2000"/> | ||||
|         </properties> | ||||
|     </rule> | ||||
|     <rule ref="rulesets/codesize.xml/ExcessiveMethodLength"> | ||||
|         <properties> | ||||
|             <!-- TODO we want to be at a value of 40. But we start high, and drop the bar slowly. --> | ||||
|             <property name="minimum" value="100"/> | ||||
|             <!-- 75 seems like a nice number. Shorter isn't always feasible and there are a few exceptions already --> | ||||
|             <property name="minimum" value="75"/> | ||||
|             <property name="ignore-whitespace" value="true"/> | ||||
|         </properties> | ||||
|     </rule> | ||||
|   | ||||
| @@ -1,9 +1,10 @@ | ||||
| parameters: | ||||
|   scanFiles: | ||||
|     - ../_ide_helper_models.php | ||||
|   universalObjectCratesClasses: | ||||
|     - Illuminate\Database\Eloquent\Model | ||||
|   # TODO: slowly remove these parameters and fix the issues found. | ||||
|   reportUnmatchedIgnoredErrors: false | ||||
|   checkGenericClassInNonGenericObjectType: false  # remove this rule when all other issues are solved. | ||||
|   ignoreErrors: | ||||
|   # TODO: slowly remove these exceptions and fix the issues found. | ||||
|     - '#Dynamic call to static method#' # all the Laravel ORM things depend on this. | ||||
| @@ -11,6 +12,7 @@ parameters: | ||||
|     - '#with no value type specified in iterable type array#' # remove this rule when all other issues are solved. | ||||
|     - '#has no value type specified in iterable type array#' # remove this rule when all other issues are solved. | ||||
|     - '#is not allowed to extend#' | ||||
|     - '#does not specify its types#' | ||||
|     - '#switch is forbidden to use#' | ||||
|     - '#is neither abstract nor final#' | ||||
|     - '#on left side of \?\?\= always exists and is not nullable#' | ||||
|   | ||||
							
								
								
									
										66
									
								
								.env.example
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								.env.example
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| # 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=local | ||||
| APP_ENV=production | ||||
|  | ||||
| # Set to true if you want to see debug information in error screens. | ||||
| APP_DEBUG=false | ||||
| @@ -78,7 +78,7 @@ 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/firefly-iii/faq/self-hosted/#i-want-to-use-sqlite | ||||
| # For other database types, please see the FAQ: https://docs.firefly-iii.org/references/faq/install/#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. | ||||
| @@ -111,7 +111,10 @@ PGSQL_SSL_CERT=null | ||||
| PGSQL_SSL_KEY=null | ||||
| PGSQL_SSL_CRL_FILE=null | ||||
|  | ||||
| # more PostgreSQL settings | ||||
| # For postgresql 15 and up, setting this to public will no longer work as expected, becasuse the | ||||
| # 'public' schema is without grants. This can be worked around by having a super user grant those | ||||
| # necessary privileges, but in security conscious setups that's not viable. | ||||
| # You will need to set this to the schema you want to use. | ||||
| PGSQL_SCHEMA=public | ||||
|  | ||||
| # If you're looking for performance improvements, you could install memcached or redis | ||||
| @@ -122,7 +125,7 @@ SESSION_DRIVER=file | ||||
| # 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 | ||||
| # can be tcp or unix. http is not supported | ||||
| REDIS_SCHEME=tcp | ||||
|  | ||||
| # use only when using 'unix' for REDIS_SCHEME. Leave empty otherwise. | ||||
| @@ -150,7 +153,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/firefly-iii/advanced-installation/email/#email | ||||
| # For instructions, see: https://docs.firefly-iii.org/how-to/firefly-iii/advanced/notifications/#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 | ||||
| @@ -184,6 +187,11 @@ SEND_REPORT_JOURNALS=true | ||||
| # Since this involves an external service, it's optional and disabled by default. | ||||
| ENABLE_EXTERNAL_MAP=false | ||||
|  | ||||
| # | ||||
| # Enable or disable exchange rate conversion. This function isn't used yet by Firefly III | ||||
| # | ||||
| ENABLE_EXCHANGE_RATES=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. | ||||
| @@ -214,7 +222,7 @@ VALID_URL_PROTOCOLS= | ||||
| # - 'web' (default, uses built in DB) | ||||
| # - 'remote_user_guard' for Authelia etc | ||||
| # Read more about these settings in the documentation. | ||||
| # https://docs.firefly-iii.org/firefly-iii/advanced-installation/authentication | ||||
| # https://docs.firefly-iii.org/how-to/firefly-iii/advanced/authentication/ | ||||
| # | ||||
| # LDAP is no longer supported :( | ||||
| # | ||||
| @@ -269,7 +277,7 @@ ALLOW_WEBHOOKS=false | ||||
| # 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 that you can find in /profile | ||||
| # | ||||
| # For more info: https://docs.firefly-iii.org/firefly-iii/advanced-installation/cron/ | ||||
| # For more info: https://docs.firefly-iii.org/how-to/firefly-iii/advanced/cron/ | ||||
| # | ||||
| # You can set this variable from a file by appending it with _FILE | ||||
| # | ||||
| @@ -291,27 +299,6 @@ DKR_BUILD_LOCALE=false | ||||
| # 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 | ||||
| @@ -324,18 +311,21 @@ PUSHER_SECRET= | ||||
| PUSHER_ID= | ||||
| DEMO_USERNAME= | ||||
| DEMO_PASSWORD= | ||||
|  | ||||
| # | ||||
| # Disable or enable the running balance column data | ||||
| # Please disable this. It's a very experimental feature. | ||||
| # | ||||
| USE_RUNNING_BALANCE=false | ||||
|  | ||||
| # | ||||
| # The v2 layout is very experimental. If it breaks you get to keep both parts. | ||||
| # Be wary of data loss. | ||||
| # | ||||
| 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. | ||||
| # | ||||
| # 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 | ||||
| # | ||||
| # If you're stuck I understand you get desperate but look SOMEWHERE ELSE. | ||||
| # Please make sure this URL matches the external URL of your Firefly III installation. | ||||
| # It is used to validate specific requests and to generate URLs in emails. | ||||
| # | ||||
| APP_URL=http://localhost | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/CODEOWNERS
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.github/CODEOWNERS
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # code owners for this Firefly III related repository | ||||
| * @JC5 @SDx3 | ||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/fr.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/fr.yml
									
									
									
									
										vendored
									
									
								
							| @@ -8,7 +8,7 @@ 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/more-information/what-its-not/) | ||||
|         - label: My request is not listed as [a very good idea, but unfortunately...](https://docs.firefly-iii.org/explanation/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 requested before. | ||||
|           required: true | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/contributing.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/contributing.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1,3 @@ | ||||
| # [Contributing guidelines](https://docs.firefly-iii.org/firefly-iii/support/#contributing-code) | ||||
| # [Contributing guidelines](https://docs.firefly-iii.org/explanation/support/#contributing-code) | ||||
| 
 | ||||
| [Contributing guidelines](https://docs.firefly-iii.org/firefly-iii/support/#contributing-code) | ||||
| [Contributing guidelines](https://docs.firefly-iii.org/explanation/support/#contributing-code) | ||||
|   | ||||
							
								
								
									
										19
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,11 +1,18 @@ | ||||
| version: 2 | ||||
| updates: | ||||
|  | ||||
|   # Check for updates to GitHub Actions every week | ||||
|   - package-ecosystem: "github-actions" | ||||
|     directory: "/" | ||||
|     labels: [] | ||||
|     schedule: | ||||
|       interval: "weekly" | ||||
|  | ||||
|   # composer updates | ||||
|   - package-ecosystem: "composer" | ||||
|     directory: "/" # Location of package manifests | ||||
|     target-branch: develop | ||||
|     labels: [ "bug" ] | ||||
|     labels: [] | ||||
|     versioning-strategy: increase | ||||
|     schedule: | ||||
|       interval: "weekly" | ||||
| @@ -13,16 +20,8 @@ updates: | ||||
|   # yarn / JS updates | ||||
|   - package-ecosystem: "npm" | ||||
|     directory: "/" | ||||
|     labels: [] | ||||
|     target-branch: develop | ||||
|     labels: [ "bug" ] | ||||
|     versioning-strategy: increase | ||||
|     schedule: | ||||
|       interval: "weekly" | ||||
|  | ||||
|   - package-ecosystem: "github-actions" | ||||
|     directory: "/" | ||||
|     target-branch: develop | ||||
|     labels: [ "bug" ] | ||||
|     versioning-strategy: increase | ||||
|     schedule: | ||||
|       interval: "weekly" | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/funding.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/funding.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,6 @@ | ||||
| # These are supported funding model platforms | ||||
| # Firefly III sponsor options | ||||
|  | ||||
| github: jc5 | ||||
| patreon: JC5 | ||||
| ko_fi: jamesc5 | ||||
| liberapay: JC5 | ||||
|   | ||||
							
								
								
									
										82
									
								
								.github/label-actions.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										82
									
								
								.github/label-actions.yml
									
									
									
									
										vendored
									
									
								
							| @@ -5,7 +5,9 @@ feature: | ||||
|   issues: | ||||
|     # Post a comment, `{issue-author}` is an optional placeholder | ||||
|     comment: | | ||||
|       Hi there! This is an automatic reply. `Share and enjoy` | ||||
|       Hi there!  | ||||
|  | ||||
|       This is an automatic reply. `Share and enjoy` | ||||
|  | ||||
|       This issue has been marked as a feature request. The requested (new) feature will become a part of Firefly III or the data importer in due course. | ||||
|  | ||||
| @@ -13,11 +15,29 @@ feature: | ||||
|  | ||||
|       Thank you for your contributions. | ||||
|  | ||||
| epic: | ||||
|   issues: | ||||
|     # Post a comment, `{issue-author}` is an optional placeholder | ||||
|     comment: | | ||||
|       Hi there!  | ||||
|  | ||||
|       This is an automatic reply. `Share and enjoy` | ||||
|  | ||||
|       This issue has been marked as an epic. In epics, large amounts of works are collected that will be part of a major new feature. If you have more ideas that could be a part of this epic, feel free to reply. | ||||
|  | ||||
|       *However*, please be aware there is NO need to reply with "+1" or "me too" or "I need this too" or whatever. Such comments are not helpful, and do not influence [the roadmap](https://roadmap.firefly-iii.org/). Your comment may be :skull: deleted.  | ||||
|  | ||||
|       If you are merely interested in this epic's progress, you can subscribe to this issue to get updates. | ||||
|  | ||||
|       Thank you for your contributions. | ||||
|  | ||||
| enhancement: | ||||
|   issues: | ||||
|     # Post a comment, `{issue-author}` is an optional placeholder | ||||
|     comment: | | ||||
|       Hi there! This is an automatic reply. `Share and enjoy` | ||||
|       Hi there!  | ||||
|  | ||||
|       This is an automatic reply. `Share and enjoy` | ||||
|  | ||||
|       This issue has been marked as an enhancement. The requested enhancement to an existing feature will become a part of Firefly III or the data importer in due course. | ||||
|  | ||||
| @@ -25,13 +45,67 @@ enhancement: | ||||
|  | ||||
|       Thank you for your contributions. | ||||
|  | ||||
| # The `solved` label is added to discussions | ||||
| triage: | ||||
|   issues: | ||||
|     # Post a comment, `{issue-author}` is an optional placeholder | ||||
|     comment: | | ||||
|       Hi there! This is an automatic reply. `Share and enjoy` | ||||
|       Hi there!  | ||||
|  | ||||
|       This is an automatic reply. `Share and enjoy` | ||||
|  | ||||
|       This issue has been marked as being in triage. The root cause is not known yet, or the issue needs more investigation. You can help by sharing debug information (from `/debug`) if you also have this issue or when you haven't already done so. | ||||
|  | ||||
|       Thank you for your contributions. | ||||
|  | ||||
| needs-moar-debug: | ||||
|   issues: | ||||
|     comment: | | ||||
|       Hi there!  | ||||
|  | ||||
|       This is an automatic reply. `Share and enjoy` | ||||
|  | ||||
|       To learn more about this issue, please make sure you share at least: | ||||
|  | ||||
|       1. The table you can find on the `/debug` page | ||||
|       2. Firefly III version | ||||
|       2. Docker, self-hosted, or hosted by a third party? | ||||
|       3. Operating system and browser | ||||
|  | ||||
|       Thank you for your contributions. | ||||
|     unlabel: needs-moar-debug | ||||
|  | ||||
|  | ||||
| needs-moar-logs: | ||||
|   issues: | ||||
|     comment: | | ||||
|       Hi there!  | ||||
|  | ||||
|       This is an automatic reply. `Share and enjoy` | ||||
|  | ||||
|       To learn more about this issue, please share the relevant log files from your Firefly III or data importer installation. | ||||
|  | ||||
|       The relevant instructions can be found in the documentation: [How to debug Firefly III?](https://docs.firefly-iii.org/how-to/general/debug/) Once debug mode is activated per these instructions, you can repeat your action and find the logs, depending on your method of installation. All is explained on the page. | ||||
|  | ||||
|       Please share the relevant log lines in your issue, either inline or as an attachment. If you feel the logs contain sensitive information, you may also send them to [james@firefly-iii.org](mailto:james@firefly-iii.org). Without these logs, it may not be possible to properly investigate this issue. | ||||
|  | ||||
|       Thank you for your contributions. | ||||
|     unlabel: needs-moar-logs | ||||
|  | ||||
| v2-layout-issue: | ||||
|   issues: | ||||
|     comment: | | ||||
|       Hi there!  | ||||
|  | ||||
|       This is an automatic reply. `Share and enjoy` | ||||
|  | ||||
|       It seems your issue is about the new v2-layout that is currently in development for Firefly III. | ||||
|  | ||||
|       These issues are collected in [a GitHub discussion](https://github.com/firefly-iii/firefly-iii/issues/8361). | ||||
|  | ||||
|       Please note that the v2 layout is still very much in development. | ||||
|  | ||||
|       Thank you for your contributions. | ||||
|     close: true | ||||
|     close-reason: completed | ||||
|     lock: false | ||||
|     unlabel: v2-layout-issue | ||||
|   | ||||
							
								
								
									
										19
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,13 +1,20 @@ | ||||
| <!-- | ||||
| Before you create a new PR, please consider: | ||||
| Thank you for submitting new code to Firefly III, or any of the related projects. Please read the following rules carefully. | ||||
| 
 | ||||
| 1) Pull requests for the MAIN branch will be closed. | ||||
| 2) DO NOT include translations in your PR. Only English US sentences. | ||||
| - Please do not submit solutions for problems that are not already reported in an issue. | ||||
| - Unfortunately, Firefly III can't be your learning experience. If you're new to all of this, please open an issue first. | ||||
| - Please do not open PRs to "discuss" possible solutions or to "get feedback" on your code. I simply don't have time for that. | ||||
| - Pull requests for the MAIN branch will be closed. | ||||
| - DO NOT include translated strings in your PR. | ||||
| - PRs (or parts thereof) that only fix issues inside code comments will not be accepted. | ||||
| 
 | ||||
| If it feels necessary to open an issue first, please do so, before you open a PR. | ||||
| 
 | ||||
| See also: https://docs.firefly-iii.org/explanation/support/#contributing-code | ||||
| 
 | ||||
| Thanks. | ||||
| --> | ||||
| 
 | ||||
| Fixes issue # (if relevant) | ||||
|      | ||||
| This PR fixes issue # (if relevant). | ||||
| 
 | ||||
| Changes in this pull request: | ||||
| 
 | ||||
|   | ||||
							
								
								
									
										58
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										58
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,58 +0,0 @@ | ||||
| # Configuration for probot-stale - https://github.com/probot/stale | ||||
|  | ||||
| # Number of days of inactivity before an Issue or Pull Request becomes stale | ||||
| 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: 14 | ||||
|  | ||||
| # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable | ||||
| # - "[Status] Maybe Later" | ||||
| exemptLabels: | ||||
|   - enhancement | ||||
|   - feature | ||||
|   - bug | ||||
|   - announcement | ||||
|   - "layout-v3" | ||||
|  | ||||
| # Set to true to ignore issues in a project (defaults to false) | ||||
| exemptProjects: false | ||||
|  | ||||
| # Set to true to ignore issues in a milestone (defaults to false) | ||||
| exemptMilestones: false | ||||
|  | ||||
| # Label to use when marking as stale | ||||
| staleLabel: stale | ||||
|  | ||||
| # Comment to post when marking as stale. Set to `false` to disable | ||||
| markComment: > | ||||
|   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. | ||||
|  | ||||
| # Comment to post when removing the stale label. | ||||
| # unmarkComment: > | ||||
| #   Your comment here. | ||||
|  | ||||
| # Comment to post when closing a stale Issue or Pull Request. | ||||
| # closeComment: > | ||||
| #   Your comment here. | ||||
|  | ||||
| # Limit the number of actions per hour, from 1-30. Default is 30 | ||||
| limitPerRun: 30 | ||||
|  | ||||
| # Limit to only `issues` or `pulls` | ||||
| # only: issues | ||||
|  | ||||
| # Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': | ||||
| # pulls: | ||||
| #   daysUntilStale: 30 | ||||
| #   markComment: > | ||||
| #     This pull request 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. | ||||
|  | ||||
| # issues: | ||||
| #   exemptLabels: | ||||
| #     - confirmed | ||||
							
								
								
									
										2
									
								
								.github/support.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/support.md
									
									
									
									
										vendored
									
									
								
							| @@ -27,7 +27,7 @@ Only then [create a new issue](https://github.com/firefly-iii/firefly-iii/issues | ||||
| 
 | ||||
| - 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/about-firefly-iii/what-its-not/). | ||||
|   wontfix". [This isn't personal](https://docs.firefly-iii.org/explanation/more-information/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. | ||||
|   | ||||
							
								
								
									
										16
									
								
								.github/workflows/cleanup.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/cleanup.yml
									
									
									
									
										vendored
									
									
								
							| @@ -2,9 +2,12 @@ | ||||
|  | ||||
| name: "Chore - Prune old builds" | ||||
|  | ||||
| permissions: | ||||
|   actions: write | ||||
|  | ||||
| on: | ||||
|   schedule: | ||||
|     - cron: '0 0 * * *' | ||||
|     - cron: '0 1 * * *' | ||||
|   workflow_dispatch: | ||||
| jobs: | ||||
|   prune: | ||||
| @@ -12,9 +15,9 @@ jobs: | ||||
|     timeout-minutes: 10 | ||||
|     steps: | ||||
|       - name: Prune cancelled/skipped runs | ||||
|         uses: actions/github-script@v6 | ||||
|         uses: actions/github-script@v7 | ||||
|         with: | ||||
|           github-token: ${{ secrets.GH_ACTIONS_PERSONAL_ACCESS_TOKEN }} | ||||
|           github-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           script: | | ||||
|             const cancelled = await github.rest.actions.listWorkflowRunsForRepo({ | ||||
|               owner: context.repo.owner, | ||||
| @@ -42,9 +45,9 @@ jobs: | ||||
|             } | ||||
|  | ||||
|       - name: Prune runs older than 3 days | ||||
|         uses: actions/github-script@v6 | ||||
|         uses: actions/github-script@v7 | ||||
|         with: | ||||
|           github-token: ${{ secrets.GH_ACTIONS_PERSONAL_ACCESS_TOKEN }} | ||||
|           github-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           script: | | ||||
|             const days_to_expiration = 3; | ||||
|             const ms_in_day = 86400000; | ||||
| @@ -56,10 +59,13 @@ jobs: | ||||
|  | ||||
|             const workflows = [ | ||||
|               'cleanup.yml', | ||||
|               'close-duplicates.yml', | ||||
|               'closed-issues.yml', | ||||
|               'debug-info-actions.yml', | ||||
|               'depsreview.yml', | ||||
|               'label-actions.yml', | ||||
|               'lock.yml', | ||||
|               'release.yml', | ||||
|               'sonarcloud.yml', | ||||
|               'stale.yml' | ||||
|             ] | ||||
|   | ||||
							
								
								
									
										39
									
								
								.github/workflows/close-duplicates.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								.github/workflows/close-duplicates.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| name: "Issues - Command to close duplicate issues" | ||||
|  | ||||
| # the workflow to execute on is comments that are newly created | ||||
| on: | ||||
|   issue_comment: | ||||
|     types: [ created ] | ||||
|  | ||||
| permissions: | ||||
|   issues: write | ||||
|   checks: read | ||||
|  | ||||
| jobs: | ||||
|   close_duplicates: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: github/command@v1.2.1 | ||||
|         id: command | ||||
|         with: | ||||
|           allowed_contexts: "issue" | ||||
|           command: ".duplicate" | ||||
|       - name: reply | ||||
|         if: ${{ steps.command.outputs.continue == 'true' }} | ||||
|         run: | | ||||
|  | ||||
|           ISSUE_TITLE=$(gh issue view ${{ steps.command.outputs.params }} --json title --jq '.title') | ||||
|  | ||||
|           gh issue comment "$NUMBER" --body "Hi there! | ||||
|  | ||||
|           This is an automatic reply. \`Share and enjoy\`. | ||||
|  | ||||
|           Your issue is probably a duplicate of issue <span>#</span>${{ steps.command.outputs.params }}: [$ISSUE_TITLE](https://github.com/firefly-iii/firefly-iii/issues/${{ steps.command.outputs.params }}). Please refer to issue #${{ steps.command.outputs.params }} for support. | ||||
|  | ||||
|           You can close this issue now. If you believe this is not in fact a duplicate, please reply and let us know. Otherwise, this issue will be automatically closed in a few days time. | ||||
|  | ||||
|           Thank you for your contributions." | ||||
|         env: | ||||
|           GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|           GH_REPO: ${{ github.repository }} | ||||
|           NUMBER: ${{ github.event.issue.number }} | ||||
							
								
								
									
										3
									
								
								.github/workflows/closed-issues.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/closed-issues.yml
									
									
									
									
										vendored
									
									
								
							| @@ -23,6 +23,3 @@ jobs: | ||||
|  | ||||
|             Thank you for your contributions. | ||||
|           repo-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|       - uses: OSDKDev/lock-issues@v1.1 | ||||
|         with: | ||||
|           repo-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|   | ||||
							
								
								
									
										32
									
								
								.github/workflows/debug-info-actions.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.github/workflows/debug-info-actions.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| name: 'Issues - Respond to hidden commands' | ||||
|  | ||||
| # the workflow to execute on is comments that are newly created | ||||
| on: | ||||
|   issues: | ||||
|     types: [ opened, edited ] | ||||
|   issue_comment: | ||||
|     types: [ created ] | ||||
|  | ||||
| # permissions needed for reacting to IssueOps commands on issues and PRs | ||||
| permissions: | ||||
|   contents: read | ||||
|   pull-requests: write | ||||
|   issues: write | ||||
|   checks: read | ||||
|  | ||||
| jobs: | ||||
|   respond: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - run: | | ||||
|           ISSUE_BODY=$(gh issue view $NUMBER --json body) | ||||
|           if [[ $ISSUE_BODY == *".eOxNZAmyGz6CXMyf"* ]]; then | ||||
|             gh issue comment "$NUMBER" --body "$V2_ISSUE_REPLY_BODY" | ||||
|             gh issue close "$NUMBER" --reason completed | ||||
|           fi | ||||
|         env: | ||||
|           GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|           GH_REPO: ${{ github.repository }} | ||||
|           NUMBER: ${{ github.event.issue.number }} | ||||
|           V2_ISSUE_REPLY_BODY: ${{ secrets.V2_ISSUE_REPLY_BODY }} | ||||
|           LABELS: v2-layout-issue | ||||
							
								
								
									
										4
									
								
								.github/workflows/depsreview.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/depsreview.yml
									
									
									
									
										vendored
									
									
								
							| @@ -9,8 +9,8 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: 'Checkout repository' | ||||
|         uses: actions/checkout@v3 | ||||
|         uses: actions/checkout@v4 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|       - name: 'Dependency review' | ||||
|         uses: actions/dependency-review-action@v3 | ||||
|         uses: actions/dependency-review-action@v4 | ||||
|   | ||||
							
								
								
									
										8
									
								
								.github/workflows/label-actions.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/label-actions.yml
									
									
									
									
										vendored
									
									
								
							| @@ -2,11 +2,11 @@ name: 'Issues - Reply to specific labels' | ||||
|  | ||||
| on: | ||||
|   issues: | ||||
|     types: [labeled, unlabeled] | ||||
|     types: [ labeled, unlabeled ] | ||||
|   pull_request_target: | ||||
|     types: [labeled, unlabeled] | ||||
|     types: [ labeled, unlabeled ] | ||||
|   discussion: | ||||
|     types: [labeled, unlabeled] | ||||
|     types: [ labeled, unlabeled ] | ||||
|  | ||||
| permissions: | ||||
|   contents: read | ||||
| @@ -18,4 +18,4 @@ jobs: | ||||
|   action: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: dessant/label-actions@v3 | ||||
|       - uses: dessant/label-actions@v4 | ||||
|   | ||||
							
								
								
									
										20
									
								
								.github/workflows/lock.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/lock.yml
									
									
									
									
										vendored
									
									
								
							| @@ -3,17 +3,27 @@ name: 'Issues - Lock old issues' | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   schedule: | ||||
|     - cron: '0 0 * * *' | ||||
|     - cron: '0 2 * * *' | ||||
|  | ||||
| concurrency: | ||||
|   group: lock-threads | ||||
|  | ||||
| permissions: | ||||
|   issues: write | ||||
|   pull-requests: write | ||||
|   discussions: write | ||||
|  | ||||
| jobs: | ||||
|   lock: | ||||
|     permissions: | ||||
|       issues: write | ||||
|       pull-requests: write | ||||
|       discussions: write | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: JC5/lock-threads@main | ||||
|       - uses: dessant/lock-threads@v5 | ||||
|         with: | ||||
|           github-token: ${{ github.token }} | ||||
|           issue-inactive-days: 90 | ||||
|           pr-inactive-days: 90 | ||||
|           issue-inactive-days: 21 | ||||
|           pr-inactive-days: 21 | ||||
|           discussion-inactive-days: 21 | ||||
|           log-output: true | ||||
|   | ||||
							
								
								
									
										296
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										296
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,296 @@ | ||||
| name: 'Code - Create new release' | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|     inputs: | ||||
|       version: | ||||
|         description: 'Release "v1.2.3" or "develop"' | ||||
|         required: true | ||||
|         default: 'develop' | ||||
|   schedule: | ||||
|     - cron: '0 3 * * MON' | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v4 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|       - name: Switch branch | ||||
|         run: | | ||||
|           if [[ "develop" == "$version" ]]; then | ||||
|             git checkout --track origin/develop | ||||
|             git pull | ||||
|           else | ||||
|             git config user.name github-actions | ||||
|             git config user.email 41898282+github-actions[bot]@users.noreply.github.com | ||||
|             git checkout --track origin/develop | ||||
|             git pull | ||||
|             git checkout main | ||||
|             git merge develop | ||||
|           fi | ||||
|         env: | ||||
|           version: ${{ github.event_name == 'schedule' && 'develop' || github.event.inputs.version }} | ||||
|       - name: Setup PHP | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         with: | ||||
|           php-version: '8.3' | ||||
|           extensions: mbstring, intl, zip, bcmath | ||||
|       - name: crowdin action | ||||
|         uses: crowdin/github-action@v2 | ||||
|         with: | ||||
|           upload_sources: true | ||||
|           download_translations: true | ||||
|           push_translations: false | ||||
|           push_sources: false | ||||
|         env: | ||||
|           GITHUB_TOKEN: ${{ github.token }} | ||||
|           CROWDIN_PROJECT_NR: ${{ secrets.CROWDIN_PROJECT_NR }} | ||||
|           CROWDIN_TOKEN: ${{ secrets.CROWDIN_TOKEN }} | ||||
|       - name: Cleanup translations | ||||
|         id: cleanup-transactions | ||||
|         uses: JC5/firefly-iii-dev@main | ||||
|         with: | ||||
|           action: 'ff3:crowdin-warning' | ||||
|           output: '' | ||||
|         env: | ||||
|           FIREFLY_III_ROOT: /github/workspace | ||||
|           GH_TOKEN: '' | ||||
|       - name: Cleanup changelog | ||||
|         id: cleanup-changelog | ||||
|         uses: JC5/firefly-iii-dev@main | ||||
|         with: | ||||
|           action: 'ff3:changelog' | ||||
|           output: '' | ||||
|         env: | ||||
|           FIREFLY_III_ROOT: /github/workspace | ||||
|           GH_TOKEN: ${{ secrets.CHANGELOG_TOKEN }} | ||||
|       - name: "Create THANKS.md" | ||||
|         id: thank-you | ||||
|         uses: JC5/firefly-iii-dev@main | ||||
|         with: | ||||
|           action: 'ff3:thank-you' | ||||
|           output: '' | ||||
|         env: | ||||
|           FIREFLY_III_ROOT: /github/workspace | ||||
|           GH_TOKEN: '' | ||||
|       - name: Extract changelog | ||||
|         id: extract-changelog | ||||
|         uses: JC5/firefly-iii-dev@main | ||||
|         with: | ||||
|           action: 'ff3:extract-changelog' | ||||
|           output: 'output' | ||||
|         env: | ||||
|           FIREFLY_III_ROOT: /github/workspace | ||||
|           GH_TOKEN: "" | ||||
|       - name: Replace version | ||||
|         id: replace-version | ||||
|         uses: JC5/firefly-iii-dev@main | ||||
|         with: | ||||
|           action: 'ff3:version' | ||||
|           output: '' | ||||
|         env: | ||||
|           FIREFLY_III_ROOT: /github/workspace | ||||
|           GH_TOKEN: "" | ||||
|           FF_III_VERSION: ${{ github.event_name == 'schedule' && 'develop' || github.event.inputs.version }} | ||||
|       - name: Generate JSON v1 | ||||
|         id: json-v1 | ||||
|         uses: JC5/firefly-iii-dev@main | ||||
|         with: | ||||
|           action: 'ff3:json-translations v1' | ||||
|           output: '' | ||||
|         env: | ||||
|           FIREFLY_III_ROOT: /github/workspace | ||||
|           GH_TOKEN: '' | ||||
|       - name: Generate JSON v2 | ||||
|         id: json-v2 | ||||
|         uses: JC5/firefly-iii-dev@main | ||||
|         with: | ||||
|           action: 'ff3:json-translations v2' | ||||
|           output: '' | ||||
|         env: | ||||
|           FIREFLY_III_ROOT: /github/workspace | ||||
|           GH_TOKEN: '' | ||||
|       - name: Code cleanup | ||||
|         id: code-cleanup | ||||
|         uses: JC5/firefly-iii-dev@main | ||||
|         with: | ||||
|           action: 'ff3:code' | ||||
|           output: '' | ||||
|         env: | ||||
|           FIREFLY_III_ROOT: /github/workspace | ||||
|           GH_TOKEN: '' | ||||
|       - name: Build JS | ||||
|         run: | | ||||
|           npm install | ||||
|           npm run prod  --workspace=v1 | ||||
|           npm run build --workspace=v2 | ||||
|           npm update | ||||
|       - name: Run CI | ||||
|         run: | | ||||
|           rm -rf vendor composer.lock | ||||
|           composer update --no-dev --no-scripts --no-plugins -q | ||||
|           sudo chown -R runner:docker resources/lang | ||||
|           .ci/phpcs.sh | ||||
|       - name: Import GPG key | ||||
|         uses: crazy-max/ghaction-import-gpg@v6 | ||||
|         with: | ||||
|           gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} | ||||
|           passphrase: ${{ secrets.PASSPHRASE }} | ||||
|       - name: Release | ||||
|         run: | | ||||
|           # do some configuration | ||||
|           sudo timedatectl set-timezone Europe/Amsterdam | ||||
|           git config user.name github-actions | ||||
|           git config user.email 41898282+github-actions[bot]@users.noreply.github.com | ||||
|           git config advice.addIgnoredFile false | ||||
|  | ||||
|           # set some variables | ||||
|           releaseName=$version | ||||
|           originalName=$version | ||||
|           zipName=FireflyIII-$version.zip | ||||
|           tarName=FireflyIII-$version.tar.gz | ||||
|  | ||||
|           # update composer (again) | ||||
|           composer update --no-dev --no-scripts --no-plugins | ||||
|           composer dump-autoload | ||||
|  | ||||
|           # if this is a develop build, slightly different variable names. | ||||
|           if [[ "develop" == "$version" ]]; then | ||||
|             [[ -z $(git status --untracked-files=normal --porcelain) ]] && echo "this branch is clean, no need to push..." && exit 0; | ||||
|             releaseName=$version-$(date +'%Y%m%d') | ||||
|             originalName=$releaseName | ||||
|             zipName=FireflyIII-develop.zip | ||||
|             tarName=FireflyIII-develop.tar.gz | ||||
|           fi | ||||
|  | ||||
|           # in both cases, if the release or tag already exists, add ".1" until it no longer exists. | ||||
|           tagFound=true | ||||
|           tagCount=1 | ||||
|           while [ "$tagFound" = true ] | ||||
|           do | ||||
|             if [ $(git tag -l "$releaseName") ]; then | ||||
|               echo "Tag $releaseName exists already." | ||||
|               releaseName="$originalName"."$tagCount" | ||||
|               echo "Tag for release is now $releaseName" | ||||
|               tagCount=$((tagCount+1)) | ||||
|             else | ||||
|              echo "Tag $releaseName does not exist, can continue" | ||||
|              tagFound=false | ||||
|             fi | ||||
|           done | ||||
|           echo "Will use tag and release name $releaseName." | ||||
|  | ||||
|           # add all content, except output.txt (this contains the changelog and/or the download instructions) | ||||
|           echo 'Add all and reset output.txt' | ||||
|           git add -A | ||||
|           if test -f "output.txt"; then | ||||
|             git reset output.txt | ||||
|           fi | ||||
|           git commit -m "Auto commit for release '$version' on $(date +'%Y-%m-%d')" || true | ||||
|           git push | ||||
|  | ||||
|           # zip and tar everything | ||||
|           echo 'Zip and tar...' | ||||
|           zip -rq $zipName . -x "*.git*" "*.ci*" "*.github*" "*node_modules*" "*output.txt*" | ||||
|           touch $tarName | ||||
|           tar --exclude=$tarName --exclude=$zipName --exclude='./.git' --exclude='./.ci' --exclude='./.github' --exclude='./node_modules' --exclude='./output.txt' -czf $tarName . | ||||
|  | ||||
|           # add sha256 sum | ||||
|           echo 'Sha sum ...' | ||||
|           sha256sum -b $zipName > $zipName.sha256 | ||||
|           sha256sum -b $tarName > $tarName.sha256 | ||||
|  | ||||
|           # add signatures: | ||||
|           gpg --armor --detach-sign $zipName | ||||
|           gpg --armor --detach-sign $tarName | ||||
|  | ||||
|           # create a development (nightly) release: | ||||
|           if [[ "develop" == "$version" ]]; then | ||||
|             echo 'Develop release.' | ||||
|             # add text to output.txt (instructions) | ||||
|             rm output.txt | ||||
|             echo "Bi-weekly development release of Firefly III with the latest fixes, translations and features. Docker users can find this release under the \`develop\` tag." >> output.txt | ||||
|             echo "" >> output.txt | ||||
|             echo "This release was created on **$(date +'%Y-%m-%d')** and may contain unexpected bugs. Data loss is rare but is not impossible. The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt | ||||
|             echo "" >> output.txt | ||||
|             echo "* Please read the installation instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/installation/docker/), [Portainer](https://docs.firefly-iii.org/how-to/firefly-iii/installation/portainer/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/installation/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/installation/self-managed/)" >> output.txt | ||||
|             echo "* Or read the upgrade instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/docker/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/self-managed/)" >> output.txt | ||||
|             echo "" >> output.txt | ||||
|             echo ":warning: Please be careful with this pre-release, as it may not work as expected." >> output.txt | ||||
|  | ||||
|             # create the release: | ||||
|             echo "Create nightly release." | ||||
|             git tag -a $releaseName -m "Nightly development release '$version' on $(date +'%Y-%m-%d')" | ||||
|             git push origin $releaseName | ||||
|             gh release create $releaseName -p --verify-tag \ | ||||
|               -t "Development release for $(date +'%Y-%m-%d')" \ | ||||
|               -F output.txt | ||||
|  | ||||
|             # add zip file to release. | ||||
|             gh release upload $releaseName $zipName | ||||
|             gh release upload $releaseName $tarName | ||||
|  | ||||
|             # add sha256 sum to release | ||||
|             gh release upload $releaseName $zipName.sha256 | ||||
|             gh release upload $releaseName $tarName.sha256 | ||||
|  | ||||
|             # add signatures to release | ||||
|             gh release upload $releaseName $zipName.asc | ||||
|             gh release upload $releaseName $tarName.asc | ||||
|  | ||||
|             # get current HEAD and add as file to the release | ||||
|             HEAD=$(git rev-parse HEAD) | ||||
|             echo $HEAD > HEAD.txt | ||||
|             gh release upload $releaseName HEAD.txt | ||||
|           else | ||||
|             echo 'MAIN (real) release' | ||||
|             sudo chown -R runner:docker output.txt | ||||
|             # add text to output.txt (more instructions) | ||||
|             echo '' >> output.txt | ||||
|             echo '### Instructions' >> output.txt | ||||
|             echo '' >> output.txt | ||||
|             echo "* Installation instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/installation/docker/), [Portainer](https://docs.firefly-iii.org/how-to/firefly-iii/installation/portainer/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/installation/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/installation/self-managed/)" >> output.txt | ||||
|             echo "* Or read the upgrade instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/docker/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/self-managed/)" >> output.txt | ||||
|             echo "* The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt | ||||
|  | ||||
|             echo "Create default release." | ||||
|             git tag -a $releaseName -m "Here be changelog" | ||||
|             git push origin $releaseName | ||||
|             gh release create $releaseName -F output.txt -t "$releaseName" --verify-tag | ||||
|  | ||||
|             # add archive files to release | ||||
|             gh release upload $releaseName $zipName | ||||
|             gh release upload $releaseName $tarName | ||||
|  | ||||
|             # add sha256 sums to release | ||||
|             gh release upload $releaseName $zipName.sha256 | ||||
|             gh release upload $releaseName $tarName.sha256 | ||||
|  | ||||
|             # add signatures to release | ||||
|             gh release upload $releaseName $zipName.asc | ||||
|             gh release upload $releaseName $tarName.asc | ||||
|  | ||||
|             # get current HEAD and add as file to the release | ||||
|             HEAD=$(git rev-parse HEAD) | ||||
|             echo $HEAD > HEAD.txt | ||||
|             gh release upload $releaseName HEAD.txt | ||||
|  | ||||
|             # remove all temporary files | ||||
|             rm output.txt | ||||
|             rm HEAD.txt | ||||
|             rm $zipName | ||||
|             rm $zipName.sha256 | ||||
|             rm $tarName | ||||
|             rm $tarName.sha256 | ||||
|  | ||||
|             # merge main back into develop | ||||
|             git checkout develop | ||||
|             git merge main | ||||
|             git push | ||||
|           fi | ||||
|         env: | ||||
|           GH_TOKEN: ${{ github.token }} | ||||
|           version: ${{ github.event_name == 'schedule' && 'develop' || github.event.inputs.version }} | ||||
							
								
								
									
										14
									
								
								.github/workflows/sonarcloud.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/workflows/sonarcloud.yml
									
									
									
									
										vendored
									
									
								
							| @@ -15,10 +15,7 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|  | ||||
|         uses: actions/checkout@v4 | ||||
|       - name: Setup PHP with Xdebug | ||||
|         uses: shivammathur/setup-php@v2 | ||||
|         with: | ||||
| @@ -48,15 +45,6 @@ jobs: | ||||
|       - name: Install Composer dependencies | ||||
|         run: composer install --prefer-dist --no-interaction --no-progress --no-scripts | ||||
|  | ||||
|       - name: PHPStan | ||||
|         run: .ci/phpstan.sh | ||||
|  | ||||
|       - name: PHPMD | ||||
|         run: .ci/phpmd.sh | ||||
|  | ||||
|       - name: PHP CS Fixer | ||||
|         run: .ci/phpcs.sh | ||||
|  | ||||
|       - name: "Create database file" | ||||
|         run: touch storage/database/database.sqlite | ||||
|  | ||||
|   | ||||
							
								
								
									
										20
									
								
								.github/workflows/stale.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/stale.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,7 +1,7 @@ | ||||
| name: "Issues - Close stale issues" | ||||
| name: "Issues - Mark and close stale issues" | ||||
| on: | ||||
|   schedule: | ||||
|     - cron: "30 1 * * *" | ||||
|     - cron: "0 4 * * *" | ||||
|   workflow_dispatch: | ||||
|  | ||||
| permissions: | ||||
| @@ -14,21 +14,25 @@ jobs: | ||||
|       pull-requests: write  # for actions/stale to close stale PRs | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/stale@v6 | ||||
|       - uses: actions/stale@v9 | ||||
|         with: | ||||
|           repo-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           stale-issue-message: > | ||||
|             Hi there! This is an automatic reply. `Share and enjoy` | ||||
|           stale-issue-message: | | ||||
|             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: > | ||||
|             Hi there! This is an automatic reply. `Share and enjoy` | ||||
|           stale-pr-message: | | ||||
|             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,epic' | ||||
|           exempt-issue-labels: 'enhancement,feature,bug,announcement,epic,triage' | ||||
|   | ||||
							
								
								
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +1,20 @@ | ||||
| /node_modules | ||||
| /storage/*.key | ||||
| /vendor | ||||
| public/hot | ||||
| npm-debug.log | ||||
| yarn-error.log | ||||
| .env | ||||
| /.ci/php-cs-fixer/vendor | ||||
| coverage.xml | ||||
|  | ||||
| # ignore generated files. | ||||
| public/build | ||||
|  | ||||
| # ignore v1 build files | ||||
| resources/assets/v1/node_modules | ||||
| resources/assets/v1/build | ||||
|  | ||||
| # ignore v2 build files | ||||
| resources/assets/v2/node_modules | ||||
| resources/assets/v2/build | ||||
|   | ||||
							
								
								
									
										198
									
								
								THANKS.md
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										198
									
								
								THANKS.md
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,198 @@ | ||||
| # Thank you! :tada: :heart: :tada: | ||||
| 
 | ||||
| Over time, many people have contributed to Firefly III. Their efforts are not always visible, but always remembered and appreciated. | ||||
| Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution. | ||||
| 
 | ||||
| ## 2024 | ||||
| - Jhon Pedroza | ||||
| - mzhubail | ||||
| - tasnim | ||||
| - withbest | ||||
| - Steve Wasiura | ||||
| - imlonghao | ||||
| - Rahman Yusuf | ||||
| - Michael Thomas | ||||
| - WardenJakx | ||||
| - kuilin | ||||
| - Stevie Robinson | ||||
| - luzpaz | ||||
| - Lemuel Roberto Bonifácio | ||||
| - maureenferreira | ||||
| 
 | ||||
| ## 2023 | ||||
| - tieu1991 | ||||
| - Maxco10 | ||||
| - zqye | ||||
| - Mateus Pereira | ||||
| - josephbadow | ||||
| - Christian Desktop | ||||
| - Edgars | ||||
| - Hannah K | ||||
| - noxonad | ||||
| - Kaijia Feng | ||||
| - Marc Ordinas i Llopis | ||||
| - Kuba Turek | ||||
| - Julien Stébenne | ||||
| 
 | ||||
| ## 2022 | ||||
| - Johannes Zellner | ||||
| - Janne Heß | ||||
| - charlesteets | ||||
| - Nathan PERIER | ||||
| - Jan Willhaus | ||||
| - canoine | ||||
| - Rick Cuddy | ||||
| - James | ||||
| - Hugo Meyronneinc | ||||
| - naveen | ||||
| - neilnaveen | ||||
| - naveensrinivasan | ||||
| - Federico Micelli | ||||
| - George Hahn | ||||
| 
 | ||||
| ## 2021 | ||||
| - StillLoading | ||||
| - Igor Rzegocki | ||||
| - Lorenzo Breda | ||||
| - Hosh | ||||
| - Flightkick | ||||
| - alex6480 | ||||
| - VREEdom | ||||
| - Hamza FADIL | ||||
| - Kasper Læssø Sørensen | ||||
| - Alex | ||||
| - Jeroen De Meerleer | ||||
| - Ruben van Erk | ||||
| - Fabian Zimmermann | ||||
| - Mirko Berger | ||||
| - KaihatsuOnline | ||||
| - MihataBG | ||||
| 
 | ||||
| ## 2020 | ||||
| - Hannes Körber | ||||
| - Julien Cassagne | ||||
| - bu4ak | ||||
| - Viktor Yakovlev | ||||
| - Oliver Kaufmann | ||||
| - Arvind Chembarpu | ||||
| - GrayStrider | ||||
| - psychowood | ||||
| - Hosh Sadiq | ||||
| - emansih | ||||
| - Aniruddha Maru | ||||
| - johnny | ||||
| - sephrat | ||||
| - bpatath | ||||
| - Florian Dupret | ||||
| - Maxim Kurbatov | ||||
| - Lucas Guima | ||||
| - Sandro | ||||
| - Ruben Verhoef | ||||
| - Daniel Idzerda | ||||
| - Calum Smith | ||||
| - Agraphie | ||||
| - Tomer Shvueli | ||||
| - Tomer S | ||||
| 
 | ||||
| ## 2019 | ||||
| - Pascal Jungblut | ||||
| - Justyn Shull | ||||
| - Timendum | ||||
| - Nicolas Lœuillet | ||||
| - Dominic Guhl | ||||
| - Melroy van den Berg | ||||
| - Henning Stein | ||||
| - Jan Klepek | ||||
| - Jonathan | ||||
| - Geoffrey “Frogeye” Preud'homme | ||||
| - Michael Fix | ||||
| - Juraj Mlich | ||||
| - Eddybrando Vásquez | ||||
| - hulloanson | ||||
| - Will Rouesnel | ||||
| - lastlink | ||||
| - Mr. Funk | ||||
| - Simon Taddiken | ||||
| - Joris | ||||
| - Bastiaan Nijkamp | ||||
| 
 | ||||
| ## 2018 | ||||
| - a1ex4 | ||||
| - Daniel Quah | ||||
| - Marco Lourenço | ||||
| - Dennis Enderink | ||||
| - Luca Bognolo | ||||
| - Mike Conway | ||||
| - Ben | ||||
| - Mathieu Post | ||||
| - George Hertz | ||||
| - HamuZ HamuZ | ||||
| - David Meiseles | ||||
| - Erik Gelderblom | ||||
| - Luca Vallerini | ||||
| - Clemens Wijnekus | ||||
| - Jacob Weisz | ||||
| - Mateusz Gozdek | ||||
| - anmol26s | ||||
| - Kevin Hellemun | ||||
| - Shashank M Chakravarthy | ||||
| - Nico Schreiner | ||||
| - Paul Sohier | ||||
| - Brenden Conte | ||||
| - Ben Yanke | ||||
| - Andrew Prokhorenkov | ||||
| - devlearner | ||||
| - Kelvin | ||||
| - J'informatique | ||||
| 
 | ||||
| ## 2017 | ||||
| - Victor Mosin | ||||
| - Justin | ||||
| - Hugo van Duijn | ||||
| - Lukas Winkler | ||||
| - Marcin Szymanski | ||||
| - Jens Kat | ||||
| - koziolek | ||||
| - jleeong | ||||
| - Simon Hanna | ||||
| - richard & xeli.eu | ||||
| - Sergey Besedin | ||||
| - Welbert Serra | ||||
| - Joris de Vries | ||||
| - Patrick Kostjens | ||||
| - Enrico Lamperti | ||||
| - Christian Musa | ||||
| - Enno Lohmeier | ||||
| 
 | ||||
| ## 2016 | ||||
| - Sander | ||||
| - Toon Schoenmakers | ||||
| - Telyn | ||||
| - Sander Kleykens | ||||
| - Tom van der Werf | ||||
| - Matthew Peck | ||||
| - Sander Mulders | ||||
| - Bonno Nachtegaal-Karels | ||||
| - Niek Haarman | ||||
| - Edwin | ||||
| - Thijs Alkemade | ||||
| - zjean | ||||
| - Graham Miller | ||||
| - Robert Horlings | ||||
| - leander091 | ||||
| 
 | ||||
| ## 2015 | ||||
| - Antonio Spinelli | ||||
| - Colin O'Dell | ||||
| - RonaldvanMeer | ||||
| - Richard Ebbers | ||||
| - Balazs Varkonyi | ||||
| - Niek van der Kooy | ||||
| - Ilya Kil | ||||
| 
 | ||||
| ## 2014 | ||||
| - Stewart Malik | ||||
| - Graham Campbell | ||||
| 
 | ||||
| 
 | ||||
| Thank you for all your support! | ||||
| @@ -32,7 +32,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| use FireflyIII\Support\Http\Api\AccountFilter; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use JsonException; | ||||
| 
 | ||||
| /** | ||||
|  * Class AccountController | ||||
| @@ -61,30 +60,25 @@ class AccountController extends Controller | ||||
|                 return $next($request); | ||||
|             } | ||||
|         ); | ||||
|         $this->balanceTypes = [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE,]; | ||||
|         $this->balanceTypes = [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Documentation for this endpoint: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getAccountsAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws JsonException | ||||
|      * @throws FireflyException | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function accounts(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|         $data  = $request->getData(); | ||||
|         $types = $data['types']; | ||||
|         $query = $data['query']; | ||||
|         $date  = $data['date'] ?? today(config('app.timezone')); | ||||
|         $data            = $request->getData(); | ||||
|         $types           = $data['types']; | ||||
|         $query           = $data['query']; | ||||
|         $date            = $data['date'] ?? today(config('app.timezone')); | ||||
|         $return          = []; | ||||
|         $result          = $this->repository->searchAccount((string)$query, $types, $this->parameters->get('limit')); | ||||
| 
 | ||||
|         $return = []; | ||||
| 
 | ||||
|         $result = $this->repository->searchAccount((string)$query, $types, $this->parameters->get('limit')); | ||||
|         // TODO this code is duplicated in the V2 Autocomplete controller, which means this code is due to be deprecated.
 | ||||
|         $defaultCurrency = app('amount')->getDefaultCurrency(); | ||||
| 
 | ||||
| @@ -102,7 +96,7 @@ class AccountController extends Controller | ||||
|                 ); | ||||
|             } | ||||
| 
 | ||||
|             $return[] = [ | ||||
|             $return[]        = [ | ||||
|                 'id'                      => (string)$account->id, | ||||
|                 'name'                    => $account->name, | ||||
|                 'name_with_balance'       => $nameWithBalance, | ||||
|   | ||||
| @@ -58,10 +58,6 @@ class BillController extends Controller | ||||
|     /** | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBillsAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function bills(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -58,10 +58,6 @@ class BudgetController extends Controller | ||||
|     /** | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBudgetsAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function budgets(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -58,10 +58,6 @@ class CategoryController extends Controller | ||||
|     /** | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCategoriesAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function categories(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -58,10 +58,6 @@ class CurrencyController extends Controller | ||||
|     /** | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCurrenciesAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function currencies(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -87,9 +83,6 @@ class CurrencyController extends Controller | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCurrenciesCodeAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @deprecated | ||||
|      */ | ||||
|     public function currenciesWithCode(AutocompleteRequest $request): JsonResponse | ||||
|   | ||||
| @@ -58,10 +58,6 @@ class ObjectGroupController extends Controller | ||||
|     /** | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getObjectGroupsAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function objectGroups(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -62,10 +62,6 @@ class PiggyBankController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getPiggiesAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function piggyBanks(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -97,10 +93,6 @@ class PiggyBankController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getPiggiesBalanceAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function piggyBanksWithBalance(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -108,6 +100,7 @@ class PiggyBankController extends Controller | ||||
|         $piggies         = $this->piggyRepository->searchPiggyBank($data['query'], $this->parameters->get('limit')); | ||||
|         $defaultCurrency = app('amount')->getDefaultCurrency(); | ||||
|         $response        = []; | ||||
| 
 | ||||
|         /** @var PiggyBank $piggy */ | ||||
|         foreach ($piggies as $piggy) { | ||||
|             $currency      = $this->accountRepository->getAccountCurrency($piggy->account) ?? $defaultCurrency; | ||||
|   | ||||
| @@ -56,10 +56,6 @@ class RecurrenceController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getRecurringAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function recurring(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -55,10 +55,6 @@ class RuleController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getRulesAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function rules(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -55,10 +55,6 @@ class RuleGroupController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getRuleGroupsAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function ruleGroups(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -58,17 +58,13 @@ class TagController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTagAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function tags(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|         $data = $request->getData(); | ||||
| 
 | ||||
|         $data   = $request->getData(); | ||||
|         $result = $this->repository->searchTags($data['query'], $this->parameters->get('limit')); | ||||
|         $array  = []; | ||||
| 
 | ||||
|         /** @var Tag $tag */ | ||||
|         foreach ($result as $tag) { | ||||
|             $array[] = [ | ||||
|   | ||||
| @@ -63,15 +63,11 @@ class TransactionController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTransactionsAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function transactions(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|         $data   = $request->getData(); | ||||
|         $result = $this->repository->searchJournalDescriptions($data['query'], $this->parameters->get('limit')); | ||||
|         $data     = $request->getData(); | ||||
|         $result   = $this->repository->searchJournalDescriptions($data['query'], $this->parameters->get('limit')); | ||||
| 
 | ||||
|         // limit and unique
 | ||||
|         $filtered = $result->unique('description'); | ||||
| @@ -93,10 +89,6 @@ class TransactionController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTransactionsIDAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function transactionsWithID(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -117,7 +109,7 @@ class TransactionController extends Controller | ||||
|         } | ||||
| 
 | ||||
|         // limit and unique
 | ||||
|         $array = []; | ||||
|         $array  = []; | ||||
| 
 | ||||
|         /** @var TransactionJournal $journal */ | ||||
|         foreach ($result as $journal) { | ||||
|   | ||||
| @@ -54,10 +54,6 @@ class TransactionTypeController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at | ||||
|      * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTransactionTypesAC
 | ||||
|      * | ||||
|      * @param AutocompleteRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function transactionTypes(AutocompleteRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -35,9 +35,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| 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 | ||||
| @@ -50,8 +47,6 @@ class AccountController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -72,45 +67,42 @@ class AccountController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * 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 | ||||
|     { | ||||
|         // parameters for chart:
 | ||||
|         $dates = $request->getAll(); | ||||
|         $dates      = $request->getAll(); | ||||
| 
 | ||||
|         /** @var Carbon $start */ | ||||
|         $start = $dates['start']; | ||||
|         $start      = $dates['start']; | ||||
| 
 | ||||
|         /** @var Carbon $end */ | ||||
|         $end = $dates['end']; | ||||
|         $end        = $dates['end']; | ||||
| 
 | ||||
|         // user's preferences
 | ||||
|         $defaultSet = $this->repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray(); | ||||
|         /** @var Preference $frontPage */ | ||||
|         $frontPage = app('preferences')->get('frontPageAccounts', $defaultSet); | ||||
|         $default   = app('amount')->getDefaultCurrency(); | ||||
| 
 | ||||
|         if (!(is_array($frontPage->data) && count($frontPage->data) > 0)) { | ||||
|             $frontPage->data = $defaultSet; | ||||
|             $frontPage->save(); | ||||
|         /** @var Preference $frontpage */ | ||||
|         $frontpage  = app('preferences')->get('frontpageAccounts', $defaultSet); | ||||
|         $default    = app('amount')->getDefaultCurrency(); | ||||
| 
 | ||||
|         if (!(is_array($frontpage->data) && count($frontpage->data) > 0)) { | ||||
|             $frontpage->data = $defaultSet; | ||||
|             $frontpage->save(); | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         // get accounts:
 | ||||
|         $accounts  = $this->repository->getAccountsById($frontPage->data); | ||||
|         $chartData = []; | ||||
|         $accounts   = $this->repository->getAccountsById($frontpage->data); | ||||
|         $chartData  = []; | ||||
| 
 | ||||
|         /** @var Account $account */ | ||||
|         foreach ($accounts as $account) { | ||||
|             $currency = $this->repository->getAccountCurrency($account); | ||||
|             $currency     = $this->repository->getAccountCurrency($account); | ||||
|             if (null === $currency) { | ||||
|                 $currency = $default; | ||||
|             } | ||||
|             $currentSet = [ | ||||
|             $currentSet   = [ | ||||
|                 'label'                   => $account->name, | ||||
|                 'currency_id'             => (string)$currency->id, | ||||
|                 'currency_code'           => $currency->code, | ||||
| @@ -126,16 +118,16 @@ class AccountController extends Controller | ||||
|             $currentStart = clone $start; | ||||
|             $range        = app('steam')->balanceInRange($account, $start, clone $end); | ||||
|             // 2022-10-11 this method no longer converts to float.
 | ||||
|             $previous = array_values($range)[0]; | ||||
|             $previous     = array_values($range)[0]; | ||||
|             while ($currentStart <= $end) { | ||||
|                 $format   = $currentStart->format('Y-m-d'); | ||||
|                 $label    = $currentStart->toAtomString(); | ||||
|                 $balance  = array_key_exists($format, $range) ? $range[$format] : $previous; | ||||
|                 $previous = $balance; | ||||
|                 $format                        = $currentStart->format('Y-m-d'); | ||||
|                 $label                         = $currentStart->toAtomString(); | ||||
|                 $balance                       = array_key_exists($format, $range) ? $range[$format] : $previous; | ||||
|                 $previous                      = $balance; | ||||
|                 $currentStart->addDay(); | ||||
|                 $currentSet['entries'][$label] = $balance; | ||||
|             } | ||||
|             $chartData[] = $currentSet; | ||||
|             $chartData[]  = $currentSet; | ||||
|         } | ||||
| 
 | ||||
|         return response()->json($chartData); | ||||
|   | ||||
| @@ -35,15 +35,14 @@ use Illuminate\Foundation\Validation\ValidatesRequests; | ||||
| use Illuminate\Routing\Controller as BaseController; | ||||
| use League\Fractal\Manager; | ||||
| use League\Fractal\Serializer\JsonApiSerializer; | ||||
| use Psr\Container\ContainerExceptionInterface; | ||||
| use Psr\Container\NotFoundExceptionInterface; | ||||
| use Symfony\Component\HttpFoundation\Exception\BadRequestException; | ||||
| use Symfony\Component\HttpFoundation\ParameterBag; | ||||
| 
 | ||||
| /** | ||||
|  * Class Controller. | ||||
|  * | ||||
| 
 | ||||
|  * @SuppressWarnings(PHPMD.CouplingBetweenObjects) | ||||
|  * @SuppressWarnings(PHPMD.NumberOfChildren) | ||||
|  */ | ||||
| abstract class Controller extends BaseController | ||||
| { | ||||
| @@ -52,6 +51,7 @@ abstract class Controller extends BaseController | ||||
|     use ValidatesRequests; | ||||
| 
 | ||||
|     protected const string CONTENT_TYPE = 'application/vnd.api+json'; | ||||
| 
 | ||||
|     /** @var array<int, string> */ | ||||
|     protected array        $allowedSort; | ||||
|     protected ParameterBag $parameters; | ||||
| @@ -78,15 +78,11 @@ abstract class Controller extends BaseController | ||||
| 
 | ||||
|     /** | ||||
|      * Method to grab all parameters from the URL. | ||||
|      * | ||||
|      * @return ParameterBag | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      */ | ||||
|     private function getParameters(): ParameterBag | ||||
|     { | ||||
|         $bag  = new ParameterBag(); | ||||
|         $page = (int)request()->get('page'); | ||||
|         $bag      = new ParameterBag(); | ||||
|         $page     = (int)request()->get('page'); | ||||
|         if ($page < 1) { | ||||
|             $page = 1; | ||||
|         } | ||||
| @@ -96,9 +92,10 @@ abstract class Controller extends BaseController | ||||
|         $bag->set('page', $page); | ||||
| 
 | ||||
|         // some date fields:
 | ||||
|         $dates = ['start', 'end', 'date']; | ||||
|         $dates    = ['start', 'end', 'date']; | ||||
|         foreach ($dates as $field) { | ||||
|             $date = null; | ||||
| 
 | ||||
|             try { | ||||
|                 $date = request()->query->get($field); | ||||
|             } catch (BadRequestException $e) { | ||||
| @@ -107,11 +104,11 @@ abstract class Controller extends BaseController | ||||
|                 app('log')->error($e->getTraceAsString()); | ||||
|                 $value = null; | ||||
|             } | ||||
|             $obj = null; | ||||
|             $obj  = null; | ||||
|             if (null !== $date) { | ||||
|                 try { | ||||
|                     $obj = Carbon::parse((string)$date); | ||||
|                 } catch (InvalidDateException | InvalidFormatException $e) { | ||||
|                 } catch (InvalidDateException|InvalidFormatException $e) { | ||||
|                     // don't care
 | ||||
|                     app('log')->warning( | ||||
|                         sprintf( | ||||
| @@ -139,12 +136,13 @@ abstract class Controller extends BaseController | ||||
|             if (null !== $value) { | ||||
|                 $bag->set($integer, (int)$value); | ||||
|             } | ||||
|             if (null === $value && | ||||
|                 'limit' === $integer && // @phpstan-ignore-line
 | ||||
|                 auth()->check()) { | ||||
|             if (null === $value | ||||
|                 && 'limit' === $integer // @phpstan-ignore-line
 | ||||
|                 && auth()->check()) { | ||||
|                 // set default for user:
 | ||||
|                 /** @var User $user */ | ||||
|                 $user = auth()->user(); | ||||
|                 $user     = auth()->user(); | ||||
| 
 | ||||
|                 /** @var Preference $pageSize */ | ||||
|                 $pageSize = (int)app('preferences')->getForUser($user, 'listPageSize', 50)->data; | ||||
|                 $bag->set($integer, $pageSize); | ||||
| @@ -155,14 +153,10 @@ abstract class Controller extends BaseController | ||||
|         return $this->getSortParameters($bag); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @param ParameterBag $bag | ||||
|      * | ||||
|      * @return ParameterBag | ||||
|      */ | ||||
|     private function getSortParameters(ParameterBag $bag): ParameterBag | ||||
|     { | ||||
|         $sortParameters = []; | ||||
| 
 | ||||
|         try { | ||||
|             $param = (string)request()->query->get('sort'); | ||||
|         } catch (BadRequestException $e) { | ||||
| @@ -174,7 +168,7 @@ abstract class Controller extends BaseController | ||||
|         if ('' === $param) { | ||||
|             return $bag; | ||||
|         } | ||||
|         $parts = explode(',', $param); | ||||
|         $parts          = explode(',', $param); | ||||
|         foreach ($parts as $part) { | ||||
|             $part      = trim($part); | ||||
|             $direction = 'asc'; | ||||
| @@ -193,8 +187,6 @@ abstract class Controller extends BaseController | ||||
| 
 | ||||
|     /** | ||||
|      * Method to help build URL's. | ||||
|      * | ||||
|      * @return string | ||||
|      */ | ||||
|     final protected function buildParams(): string | ||||
|     { | ||||
| @@ -206,22 +198,20 @@ abstract class Controller extends BaseController | ||||
|             } | ||||
|             if ($value instanceof Carbon) { | ||||
|                 $params[$key] = $value->format('Y-m-d'); | ||||
| 
 | ||||
|                 continue; | ||||
|             } | ||||
|             $params[$key] = $value; | ||||
|         } | ||||
| 
 | ||||
|         return $return . http_build_query($params); | ||||
|         return $return.http_build_query($params); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @return Manager | ||||
|      */ | ||||
|     final protected function getManager(): Manager | ||||
|     { | ||||
|         // create some objects:
 | ||||
|         $manager = new Manager(); | ||||
|         $baseUrl = request()->getSchemeAndHttpHost() . '/api/v1'; | ||||
|         $baseUrl = request()->getSchemeAndHttpHost().'/api/v1'; | ||||
|         $manager->setSerializer(new JsonApiSerializer($baseUrl)); | ||||
| 
 | ||||
|         return $manager; | ||||
|   | ||||
| @@ -44,9 +44,6 @@ class TransactionController extends Controller | ||||
| { | ||||
|     private AccountRepositoryInterface $repository; | ||||
| 
 | ||||
|     /** | ||||
|      * | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         parent::__construct(); | ||||
| @@ -63,10 +60,6 @@ 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 | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function update(TransactionRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -81,7 +74,7 @@ class TransactionController extends Controller | ||||
|             $destination = $this->repository->find((int)$params['update']['account_id']); | ||||
| 
 | ||||
|             /** @var AccountDestroyService $service */ | ||||
|             $service = app(AccountDestroyService::class); | ||||
|             $service     = app(AccountDestroyService::class); | ||||
|             $service->moveTransactions($original, $destination); | ||||
|         } | ||||
| 
 | ||||
| @@ -89,9 +82,7 @@ class TransactionController extends Controller | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @param array $params <array<string, array<string, int|string>>> | ||||
|      * | ||||
|      * @return bool | ||||
|      * @param array<string, array<string, string>> $params | ||||
|      */ | ||||
|     private function isUpdateTransactionAccount(array $params): bool | ||||
|     { | ||||
|   | ||||
| @@ -45,6 +45,7 @@ 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 | ||||
| @@ -57,20 +58,17 @@ class DestroyController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/destroyData
 | ||||
|      * | ||||
|      * @param DestroyRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function destroy(DestroyRequest $request): JsonResponse | ||||
|     { | ||||
|         $objects      = $request->getObjects(); | ||||
|         $this->unused = $request->boolean('unused', false); | ||||
|         $objects         = $request->getObjects(); | ||||
|         $this->unused    = $request->boolean('unused', false); | ||||
| 
 | ||||
|         $allExceptAssets = [AccountType::BENEFICIARY, AccountType::CASH, AccountType::CREDITCARD, AccountType::DEFAULT, AccountType::EXPENSE, AccountType::IMPORT, AccountType::INITIAL_BALANCE, AccountType::LIABILITY_CREDIT, AccountType::RECONCILIATION, AccountType::REVENUE,]; | ||||
|         $all             = [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,]; | ||||
|         $allExceptAssets = [AccountType::BENEFICIARY, AccountType::CASH, AccountType::CREDITCARD, AccountType::DEFAULT, AccountType::EXPENSE, AccountType::IMPORT, AccountType::INITIAL_BALANCE, AccountType::LIABILITY_CREDIT, AccountType::RECONCILIATION, AccountType::REVENUE]; | ||||
|         $all             = [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]; | ||||
|         $liabilities     = [AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD]; | ||||
|         $transactions    = [TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER, TransactionType::RECONCILIATION, TransactionType::OPENING_BALANCE,]; | ||||
|         $transactions    = [TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER, TransactionType::RECONCILIATION]; | ||||
| 
 | ||||
|         match ($objects) { | ||||
|             'budgets'                => $this->destroyBudgets(), | ||||
| @@ -99,17 +97,14 @@ class DestroyController extends Controller | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * | ||||
|      */ | ||||
|     private function destroyBudgets(): void | ||||
|     { | ||||
|         /** @var AvailableBudgetRepositoryInterface $abRepository */ | ||||
|         $abRepository = app(AvailableBudgetRepositoryInterface::class); | ||||
|         $abRepository     = app(AvailableBudgetRepositoryInterface::class); | ||||
|         $abRepository->destroyAll(); | ||||
| 
 | ||||
|         /** @var BudgetLimitRepositoryInterface $blRepository */ | ||||
|         $blRepository = app(BudgetLimitRepositoryInterface::class); | ||||
|         $blRepository     = app(BudgetLimitRepositoryInterface::class); | ||||
|         $blRepository->destroyAll(); | ||||
| 
 | ||||
|         /** @var BudgetRepositoryInterface $budgetRepository */ | ||||
| @@ -117,9 +112,6 @@ class DestroyController extends Controller | ||||
|         $budgetRepository->destroyAll(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * | ||||
|      */ | ||||
|     private function destroyBills(): void | ||||
|     { | ||||
|         /** @var BillRepositoryInterface $repository */ | ||||
| @@ -127,9 +119,6 @@ class DestroyController extends Controller | ||||
|         $repository->destroyAll(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * | ||||
|      */ | ||||
|     private function destroyPiggyBanks(): void | ||||
|     { | ||||
|         /** @var PiggyBankRepositoryInterface $repository */ | ||||
| @@ -137,9 +126,6 @@ class DestroyController extends Controller | ||||
|         $repository->destroyAll(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * | ||||
|      */ | ||||
|     private function destroyRules(): void | ||||
|     { | ||||
|         /** @var RuleGroupRepositoryInterface $repository */ | ||||
| @@ -147,9 +133,6 @@ class DestroyController extends Controller | ||||
|         $repository->destroyAll(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * | ||||
|      */ | ||||
|     private function destroyRecurringTransactions(): void | ||||
|     { | ||||
|         /** @var RecurringRepositoryInterface $repository */ | ||||
| @@ -157,9 +140,6 @@ class DestroyController extends Controller | ||||
|         $repository->destroyAll(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * | ||||
|      */ | ||||
|     private function destroyCategories(): void | ||||
|     { | ||||
|         /** @var CategoryRepositoryInterface $categoryRepos */ | ||||
| @@ -167,9 +147,6 @@ class DestroyController extends Controller | ||||
|         $categoryRepos->destroyAll(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * | ||||
|      */ | ||||
|     private function destroyTags(): void | ||||
|     { | ||||
|         /** @var TagRepositoryInterface $tagRepository */ | ||||
| @@ -177,9 +154,6 @@ class DestroyController extends Controller | ||||
|         $tagRepository->destroyAll(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @return void | ||||
|      */ | ||||
|     private function destroyObjectGroups(): void | ||||
|     { | ||||
|         /** @var ObjectGroupRepositoryInterface $repository */ | ||||
| @@ -188,7 +162,7 @@ class DestroyController extends Controller | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @param array $types <int, string> | ||||
|      * @param array<int, string> $types | ||||
|      */ | ||||
|     private function destroyAccounts(array $types): void | ||||
|     { | ||||
| @@ -202,18 +176,21 @@ class DestroyController extends Controller | ||||
|             $count = $account->transactions()->count(); | ||||
|             if (true === $this->unused && 0 === $count) { | ||||
|                 app('log')->info(sprintf('Deleted unused account #%d "%s"', $account->id, $account->name)); | ||||
|                 Log::channel('audit')->info(sprintf('Deleted unused account #%d "%s"', $account->id, $account->name)); | ||||
|                 $service->destroy($account, null); | ||||
| 
 | ||||
|                 continue; | ||||
|             } | ||||
|             if (false === $this->unused) { | ||||
|                 app('log')->info(sprintf('Deleting account #%d "%s"', $account->id, $account->name)); | ||||
|                 Log::channel('audit')->warning(sprintf('Deleted account #%d "%s"', $account->id, $account->name)); | ||||
|                 $service->destroy($account, null); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @param array $types <int, string> | ||||
|      * @param array<int, string> $types | ||||
|      */ | ||||
|     private function destroyTransactions(array $types): void | ||||
|     { | ||||
| @@ -221,6 +198,7 @@ class DestroyController extends Controller | ||||
|         $repository = app(JournalRepositoryInterface::class); | ||||
|         $journals   = $repository->findByType($types); | ||||
|         $service    = app(JournalDestroyService::class); | ||||
| 
 | ||||
|         /** @var TransactionJournal $journal */ | ||||
|         foreach ($journals as $journal) { | ||||
|             $service->destroy($journal); | ||||
|   | ||||
| @@ -29,8 +29,6 @@ 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 | ||||
| @@ -59,12 +57,7 @@ class ExportController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportAccounts
 | ||||
|      * | ||||
|      * @param ExportRequest $request | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws FireflyException | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.UnusedFormalParameter) | ||||
|      */ | ||||
| @@ -76,12 +69,7 @@ class ExportController extends Controller | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @param string $key | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws FireflyException | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      */ | ||||
|     private function returnExport(string $key): LaravelResponse | ||||
|     { | ||||
| @@ -94,13 +82,14 @@ class ExportController extends Controller | ||||
|         $response | ||||
|             ->header('Content-Description', 'File Transfer') | ||||
|             ->header('Content-Type', 'application/octet-stream') | ||||
|             ->header('Content-Disposition', 'attachment; filename=' . $fileName) | ||||
|             ->header('Content-Disposition', 'attachment; filename='.$fileName) | ||||
|             ->header('Content-Transfer-Encoding', 'binary') | ||||
|             ->header('Connection', 'Keep-Alive') | ||||
|             ->header('Expires', '0') | ||||
|             ->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') | ||||
|             ->header('Pragma', 'public') | ||||
|             ->header('Content-Length', (string)strlen($data[$key])); | ||||
|             ->header('Content-Length', (string)strlen($data[$key])) | ||||
|         ; | ||||
| 
 | ||||
|         return $response; | ||||
|     } | ||||
| @@ -109,12 +98,8 @@ class ExportController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportBills
 | ||||
|      * | ||||
|      * @param ExportRequest $request | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws FireflyException | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.UnusedFormalParameter) | ||||
|      */ | ||||
|     public function bills(ExportRequest $request): LaravelResponse | ||||
| @@ -128,12 +113,8 @@ class ExportController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportBudgets
 | ||||
|      * | ||||
|      * @param ExportRequest $request | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws FireflyException | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.UnusedFormalParameter) | ||||
|      */ | ||||
|     public function budgets(ExportRequest $request): LaravelResponse | ||||
| @@ -147,12 +128,8 @@ class ExportController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportCategories
 | ||||
|      * | ||||
|      * @param ExportRequest $request | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws FireflyException | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.UnusedFormalParameter) | ||||
|      */ | ||||
|     public function categories(ExportRequest $request): LaravelResponse | ||||
| @@ -166,12 +143,8 @@ class ExportController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportPiggies
 | ||||
|      * | ||||
|      * @param ExportRequest $request | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws FireflyException | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.UnusedFormalParameter) | ||||
|      */ | ||||
|     public function piggyBanks(ExportRequest $request): LaravelResponse | ||||
| @@ -185,12 +158,8 @@ class ExportController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportRecurring
 | ||||
|      * | ||||
|      * @param ExportRequest $request | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws FireflyException | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.UnusedFormalParameter) | ||||
|      */ | ||||
|     public function recurring(ExportRequest $request): LaravelResponse | ||||
| @@ -204,12 +173,8 @@ class ExportController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportRules
 | ||||
|      * | ||||
|      * @param ExportRequest $request | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws FireflyException | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.UnusedFormalParameter) | ||||
|      */ | ||||
|     public function rules(ExportRequest $request): LaravelResponse | ||||
| @@ -223,12 +188,8 @@ class ExportController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportTags
 | ||||
|      * | ||||
|      * @param ExportRequest $request | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws FireflyException | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.UnusedFormalParameter) | ||||
|      */ | ||||
|     public function tags(ExportRequest $request): LaravelResponse | ||||
| @@ -242,12 +203,7 @@ class ExportController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportTransactions
 | ||||
|      * | ||||
|      * @param ExportRequest $request | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws ContainerExceptionInterface | ||||
|      * @throws FireflyException | ||||
|      * @throws NotFoundExceptionInterface | ||||
|      */ | ||||
|     public function transactions(ExportRequest $request): LaravelResponse | ||||
|     { | ||||
|   | ||||
| @@ -47,8 +47,6 @@ 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 | ||||
|     { | ||||
| @@ -64,8 +62,10 @@ class PurgeController extends Controller | ||||
|         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.*']); | ||||
|         $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(); | ||||
| @@ -86,7 +86,6 @@ class PurgeController extends Controller | ||||
|         // tags
 | ||||
|         Tag::whereUserId($user->id)->onlyTrashed()->forceDelete(); | ||||
| 
 | ||||
| 
 | ||||
|         // accounts
 | ||||
|         Account::whereUserId($user->id)->onlyTrashed()->forceDelete(); | ||||
| 
 | ||||
|   | ||||
| @@ -32,7 +32,6 @@ use FireflyIII\Support\Http\Api\ApiSupport; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * Class AccountController | ||||
|  * | ||||
|  * Shows expense information grouped or limited by date. | ||||
| @@ -47,16 +46,14 @@ class AccountController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         parent::__construct(); | ||||
|         $this->middleware( | ||||
|             function ($request, $next) { | ||||
|                 $user             = auth()->user(); | ||||
|                 $this->repository = app(AccountRepositoryInterface::class); | ||||
|                 $user                = auth()->user(); | ||||
|                 $this->repository    = app(AccountRepositoryInterface::class); | ||||
|                 $this->repository->setUser($user); | ||||
| 
 | ||||
|                 $this->opsRepository = app(OperationsRepositoryInterface::class); | ||||
| @@ -70,10 +67,6 @@ class AccountController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseAsset
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function asset(GenericRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -101,10 +94,6 @@ class AccountController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseExpense
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function expense(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -60,18 +60,14 @@ class BillController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseBill
 | ||||
|      * | ||||
|      * Expenses per bill, possibly filtered by bill and account. | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function bill(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $bills    = $request->getBills(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $bills      = $request->getBills(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // get all bills:
 | ||||
|         if (0 === $bills->count()) { | ||||
| @@ -79,7 +75,7 @@ class BillController extends Controller | ||||
|         } | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type) by the given bills and accounts.
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::WITHDRAWAL])->setRange($start, $end)->setSourceAccounts($accounts); | ||||
|         $collector->setBills($bills); | ||||
| 
 | ||||
| @@ -92,7 +88,7 @@ class BillController extends Controller | ||||
|             $foreignKey        = sprintf('%d-%d', $billId, $foreignCurrencyId); | ||||
| 
 | ||||
|             if (0 !== $currencyId) { | ||||
|                 $response[$key]                     ??= [ | ||||
|                 $response[$key] ??= [ | ||||
|                     'id'               => (string)$billId, | ||||
|                     'name'             => $journal['bill_name'], | ||||
|                     'difference'       => '0', | ||||
| @@ -104,7 +100,7 @@ class BillController extends Controller | ||||
|                 $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, | ||||
| @@ -123,20 +119,16 @@ class BillController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseNoBill
 | ||||
|      * | ||||
|      * Expenses for no bill filtered by account. | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function noBill(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type) by the given bills and accounts.
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::WITHDRAWAL])->setRange($start, $end)->setSourceAccounts($accounts); | ||||
|         $collector->withoutBill(); | ||||
| 
 | ||||
| @@ -147,7 +139,7 @@ class BillController extends Controller | ||||
|             $foreignCurrencyId = (int)$journal['foreign_currency_id']; | ||||
| 
 | ||||
|             if (0 !== $currencyId) { | ||||
|                 $response[$currencyId]                     ??= [ | ||||
|                 $response[$currencyId] ??= [ | ||||
|                     'difference'       => '0', | ||||
|                     'difference_float' => 0, | ||||
|                     'currency_id'      => (string)$currencyId, | ||||
| @@ -157,7 +149,7 @@ class BillController extends Controller | ||||
|                 $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, | ||||
|   | ||||
| @@ -43,8 +43,6 @@ class BudgetController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -67,10 +65,6 @@ class BudgetController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseBudget
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function budget(GenericRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -82,9 +76,11 @@ class BudgetController extends Controller | ||||
|         if (0 === $budgets->count()) { | ||||
|             $budgets = $this->repository->getActiveBudgets(); | ||||
|         } | ||||
| 
 | ||||
|         /** @var Budget $budget */ | ||||
|         foreach ($budgets as $budget) { | ||||
|             $expenses = $this->opsRepository->sumExpenses($start, $end, $assetAccounts, new Collection([$budget])); | ||||
| 
 | ||||
|             /** @var array $expense */ | ||||
|             foreach ($expenses as $expense) { | ||||
|                 $result[] = [ | ||||
| @@ -104,10 +100,6 @@ class BudgetController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseNoBudget
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function noBudget(GenericRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -116,6 +108,7 @@ class BudgetController extends Controller | ||||
|         $assetAccounts = $request->getAssetAccounts(); | ||||
|         $result        = []; | ||||
|         $expenses      = $this->noRepository->sumExpenses($start, $end, $assetAccounts); | ||||
| 
 | ||||
|         /** @var array $expense */ | ||||
|         foreach ($expenses as $expense) { | ||||
|             $result[] = [ | ||||
|   | ||||
| @@ -44,8 +44,6 @@ class CategoryController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -68,10 +66,6 @@ class CategoryController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferCategory
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function category(GenericRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -83,9 +77,11 @@ class CategoryController extends Controller | ||||
|         if (0 === $categories->count()) { | ||||
|             $categories = $this->repository->getCategories(); | ||||
|         } | ||||
| 
 | ||||
|         /** @var Category $category */ | ||||
|         foreach ($categories as $category) { | ||||
|             $expenses = $this->opsRepository->sumExpenses($start, $end, $assetAccounts, new Collection([$category])); | ||||
| 
 | ||||
|             /** @var array $expense */ | ||||
|             foreach ($expenses as $expense) { | ||||
|                 $result[] = [ | ||||
| @@ -105,10 +101,6 @@ class CategoryController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferNoCategory
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function noCategory(GenericRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -117,6 +109,7 @@ class CategoryController extends Controller | ||||
|         $assetAccounts = $request->getAssetAccounts(); | ||||
|         $result        = []; | ||||
|         $expenses      = $this->noRepository->sumExpenses($start, $end, $assetAccounts); | ||||
| 
 | ||||
|         /** @var array $expense */ | ||||
|         foreach ($expenses as $expense) { | ||||
|             $result[] = [ | ||||
|   | ||||
| @@ -37,20 +37,16 @@ class PeriodController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseTotal
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function total(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type)
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::WITHDRAWAL])->setRange($start, $end)->setSourceAccounts($accounts); | ||||
|         $genericSet = $collector->getExtractedJournals(); | ||||
|         foreach ($genericSet as $journal) { | ||||
| @@ -58,7 +54,7 @@ class PeriodController extends Controller | ||||
|             $foreignCurrencyId = (int)$journal['foreign_currency_id']; | ||||
| 
 | ||||
|             if (0 !== $currencyId) { | ||||
|                 $response[$currencyId]                     ??= [ | ||||
|                 $response[$currencyId] ??= [ | ||||
|                     'difference'       => '0', | ||||
|                     'difference_float' => 0, | ||||
|                     'currency_id'      => (string)$currencyId, | ||||
| @@ -68,7 +64,7 @@ class PeriodController extends Controller | ||||
|                 $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, | ||||
|   | ||||
| @@ -59,20 +59,16 @@ class TagController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseNoTag
 | ||||
|      * | ||||
|      * Expenses for no tag filtered by account. | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function noTag(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type) by the given bills and accounts.
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::WITHDRAWAL])->setRange($start, $end)->setSourceAccounts($accounts); | ||||
|         $collector->withoutTags(); | ||||
| 
 | ||||
| @@ -83,7 +79,7 @@ class TagController extends Controller | ||||
|             $foreignCurrencyId = (int)$journal['foreign_currency_id']; | ||||
| 
 | ||||
|             if (0 !== $currencyId) { | ||||
|                 $response[$currencyId]                     ??= [ | ||||
|                 $response[$currencyId] ??= [ | ||||
|                     'difference'       => '0', | ||||
|                     'difference_float' => 0, | ||||
|                     'currency_id'      => (string)$currencyId, | ||||
| @@ -93,7 +89,7 @@ class TagController extends Controller | ||||
|                 $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, | ||||
| @@ -112,18 +108,14 @@ class TagController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseTag
 | ||||
|      * | ||||
|      * Expenses per tag, possibly filtered by tag and account. | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function tag(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $tags     = $request->getTags(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $tags       = $request->getTags(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // get all tags:
 | ||||
|         if (0 === $tags->count()) { | ||||
| @@ -131,10 +123,11 @@ class TagController extends Controller | ||||
|         } | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type) by the given bills and accounts.
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::WITHDRAWAL])->setRange($start, $end)->setSourceAccounts($accounts); | ||||
|         $collector->setTags($tags); | ||||
|         $genericSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         /** @var array $journal */ | ||||
|         foreach ($genericSet as $journal) { | ||||
|             $currencyId        = (int)$journal['currency_id']; | ||||
| @@ -148,7 +141,7 @@ class TagController extends Controller | ||||
| 
 | ||||
|                 // on currency ID
 | ||||
|                 if (0 !== $currencyId) { | ||||
|                     $response[$key]                     ??= [ | ||||
|                     $response[$key] ??= [ | ||||
|                         'id'               => (string)$tagId, | ||||
|                         'name'             => $tag['name'], | ||||
|                         'difference'       => '0', | ||||
|   | ||||
| @@ -32,7 +32,6 @@ use FireflyIII\Support\Http\Api\ApiSupport; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * Class AccountController | ||||
|  * | ||||
|  * Shows income information grouped or limited by date. | ||||
| @@ -47,16 +46,14 @@ class AccountController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         parent::__construct(); | ||||
|         $this->middleware( | ||||
|             function ($request, $next) { | ||||
|                 $user             = auth()->user(); | ||||
|                 $this->repository = app(AccountRepositoryInterface::class); | ||||
|                 $user                = auth()->user(); | ||||
|                 $this->repository    = app(AccountRepositoryInterface::class); | ||||
|                 $this->repository->setUser($user); | ||||
| 
 | ||||
|                 $this->opsRepository = app(OperationsRepositoryInterface::class); | ||||
| @@ -70,10 +67,6 @@ class AccountController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeAsset
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function asset(GenericRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -82,6 +75,7 @@ class AccountController extends Controller | ||||
|         $assetAccounts = $request->getAssetAccounts(); | ||||
|         $income        = $this->opsRepository->sumIncomeByDestination($start, $end, $assetAccounts); | ||||
|         $result        = []; | ||||
| 
 | ||||
|         /** @var array $entry */ | ||||
|         foreach ($income as $entry) { | ||||
|             $result[] = [ | ||||
| @@ -100,10 +94,6 @@ class AccountController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeRevenue
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function revenue(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -44,8 +44,6 @@ class CategoryController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -68,10 +66,6 @@ class CategoryController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeCategory
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function category(GenericRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -83,9 +77,11 @@ class CategoryController extends Controller | ||||
|         if (0 === $categories->count()) { | ||||
|             $categories = $this->repository->getCategories(); | ||||
|         } | ||||
| 
 | ||||
|         /** @var Category $category */ | ||||
|         foreach ($categories as $category) { | ||||
|             $expenses = $this->opsRepository->sumIncome($start, $end, $assetAccounts, new Collection([$category])); | ||||
| 
 | ||||
|             /** @var array $expense */ | ||||
|             foreach ($expenses as $expense) { | ||||
|                 $result[] = [ | ||||
| @@ -105,10 +101,6 @@ class CategoryController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeNoCategory
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function noCategory(GenericRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -117,6 +109,7 @@ class CategoryController extends Controller | ||||
|         $assetAccounts = $request->getAssetAccounts(); | ||||
|         $result        = []; | ||||
|         $expenses      = $this->noRepository->sumIncome($start, $end, $assetAccounts); | ||||
| 
 | ||||
|         /** @var array $expense */ | ||||
|         foreach ($expenses as $expense) { | ||||
|             $result[] = [ | ||||
|   | ||||
| @@ -37,20 +37,16 @@ class PeriodController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeTotal
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function total(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type)
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::DEPOSIT])->setRange($start, $end)->setDestinationAccounts($accounts); | ||||
|         $genericSet = $collector->getExtractedJournals(); | ||||
|         foreach ($genericSet as $journal) { | ||||
| @@ -58,7 +54,7 @@ class PeriodController extends Controller | ||||
|             $foreignCurrencyId = (int)$journal['foreign_currency_id']; | ||||
| 
 | ||||
|             if (0 !== $currencyId) { | ||||
|                 $response[$currencyId]                     ??= [ | ||||
|                 $response[$currencyId] ??= [ | ||||
|                     'difference'       => '0', | ||||
|                     'difference_float' => 0, | ||||
|                     'currency_id'      => (string)$currencyId, | ||||
| @@ -68,7 +64,7 @@ class PeriodController extends Controller | ||||
|                 $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, | ||||
|   | ||||
| @@ -60,20 +60,16 @@ class TagController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeTag
 | ||||
|      * | ||||
|      * Expenses for no tag filtered by account. | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function noTag(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type) by the given bills and accounts.
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::DEPOSIT])->setRange($start, $end)->setDestinationAccounts($accounts); | ||||
|         $collector->withoutTags(); | ||||
| 
 | ||||
| @@ -84,7 +80,7 @@ class TagController extends Controller | ||||
|             $foreignCurrencyId = (int)$journal['foreign_currency_id']; | ||||
| 
 | ||||
|             if (0 !== $currencyId) { | ||||
|                 $response[$currencyId]                     ??= [ | ||||
|                 $response[$currencyId] ??= [ | ||||
|                     'difference'       => '0', | ||||
|                     'difference_float' => 0, | ||||
|                     'currency_id'      => (string)$currencyId, | ||||
| @@ -94,7 +90,7 @@ class TagController extends Controller | ||||
|                 $response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; | ||||
|             } | ||||
|             if (0 !== $foreignCurrencyId) { | ||||
|                 $response[$foreignCurrencyId]                     ??= [ | ||||
|                 $response[$foreignCurrencyId] ??= [ | ||||
|                     'difference'       => '0', | ||||
|                     'difference_float' => 0, | ||||
|                     'currency_id'      => (string)$foreignCurrencyId, | ||||
| @@ -116,18 +112,14 @@ class TagController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeNoTag
 | ||||
|      * | ||||
|      * Expenses per tag, possibly filtered by tag and account. | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function tag(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $tags     = $request->getTags(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $tags       = $request->getTags(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // get all tags:
 | ||||
|         if (0 === $tags->count()) { | ||||
| @@ -135,10 +127,11 @@ class TagController extends Controller | ||||
|         } | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type) by the given bills and accounts.
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::DEPOSIT])->setRange($start, $end)->setDestinationAccounts($accounts); | ||||
|         $collector->setTags($tags); | ||||
|         $genericSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         /** @var array $journal */ | ||||
|         foreach ($genericSet as $journal) { | ||||
|             $currencyId        = (int)$journal['currency_id']; | ||||
| @@ -152,7 +145,7 @@ class TagController extends Controller | ||||
| 
 | ||||
|                 // on currency ID
 | ||||
|                 if (0 !== $currencyId) { | ||||
|                     $response[$key]                     ??= [ | ||||
|                     $response[$key] ??= [ | ||||
|                         'id'               => (string)$tagId, | ||||
|                         'name'             => $tag['name'], | ||||
|                         'difference'       => '0', | ||||
|   | ||||
| @@ -40,8 +40,6 @@ class AccountController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -60,10 +58,6 @@ class AccountController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransfers
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function asset(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -43,8 +43,6 @@ class CategoryController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -67,10 +65,6 @@ class CategoryController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferCategory
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function category(GenericRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -82,9 +76,11 @@ class CategoryController extends Controller | ||||
|         if (0 === $categories->count()) { | ||||
|             $categories = $this->repository->getCategories(); | ||||
|         } | ||||
| 
 | ||||
|         /** @var Category $category */ | ||||
|         foreach ($categories as $category) { | ||||
|             $expenses = $this->opsRepository->sumTransfers($start, $end, $assetAccounts, new Collection([$category])); | ||||
| 
 | ||||
|             /** @var array $expense */ | ||||
|             foreach ($expenses as $expense) { | ||||
|                 $result[] = [ | ||||
| @@ -104,10 +100,6 @@ class CategoryController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferNoCategory
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function noCategory(GenericRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -116,6 +108,7 @@ class CategoryController extends Controller | ||||
|         $assetAccounts = $request->getAssetAccounts(); | ||||
|         $result        = []; | ||||
|         $expenses      = $this->noRepository->sumTransfers($start, $end, $assetAccounts); | ||||
| 
 | ||||
|         /** @var array $expense */ | ||||
|         foreach ($expenses as $expense) { | ||||
|             $result[] = [ | ||||
|   | ||||
| @@ -37,20 +37,16 @@ class PeriodController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferTotal
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function total(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type)
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::TRANSFER])->setRange($start, $end)->setDestinationAccounts($accounts); | ||||
|         $genericSet = $collector->getExtractedJournals(); | ||||
|         foreach ($genericSet as $journal) { | ||||
| @@ -58,7 +54,7 @@ class PeriodController extends Controller | ||||
|             $foreignCurrencyId = (int)$journal['foreign_currency_id']; | ||||
| 
 | ||||
|             if (0 !== $currencyId) { | ||||
|                 $response[$currencyId]                     ??= [ | ||||
|                 $response[$currencyId] ??= [ | ||||
|                     'difference'       => '0', | ||||
|                     'difference_float' => 0, | ||||
|                     'currency_id'      => (string)$currencyId, | ||||
| @@ -68,7 +64,7 @@ class PeriodController extends Controller | ||||
|                 $response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; | ||||
|             } | ||||
|             if (0 !== $foreignCurrencyId) { | ||||
|                 $response[$foreignCurrencyId]                     ??= [ | ||||
|                 $response[$foreignCurrencyId] ??= [ | ||||
|                     'difference'       => '0', | ||||
|                     'difference_float' => 0, | ||||
|                     'currency_id'      => (string)$foreignCurrencyId, | ||||
|   | ||||
| @@ -57,20 +57,16 @@ class TagController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferNoTag
 | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function noTag(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type) by the given bills and accounts.
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::TRANSFER])->setRange($start, $end)->setDestinationAccounts($accounts); | ||||
|         $collector->withoutTags(); | ||||
| 
 | ||||
| @@ -81,7 +77,7 @@ class TagController extends Controller | ||||
|             $foreignCurrencyId = (int)$journal['foreign_currency_id']; | ||||
| 
 | ||||
|             if (0 !== $currencyId) { | ||||
|                 $response[$currencyId]                     ??= [ | ||||
|                 $response[$currencyId] ??= [ | ||||
|                     'difference'       => '0', | ||||
|                     'difference_float' => 0, | ||||
|                     'currency_id'      => (string)$currencyId, | ||||
| @@ -91,7 +87,7 @@ class TagController extends Controller | ||||
|                 $response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; | ||||
|             } | ||||
|             if (0 !== $foreignCurrencyId) { | ||||
|                 $response[$foreignCurrencyId]                     ??= [ | ||||
|                 $response[$foreignCurrencyId] ??= [ | ||||
|                     'difference'       => '0', | ||||
|                     'difference_float' => 0, | ||||
|                     'currency_id'      => (string)$foreignCurrencyId, | ||||
| @@ -113,18 +109,14 @@ class TagController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferTag
 | ||||
|      * | ||||
|      * Transfers per tag, possibly filtered by tag and account. | ||||
|      * | ||||
|      * @param GenericRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function tag(GenericRequest $request): JsonResponse | ||||
|     { | ||||
|         $accounts = $request->getAssetAccounts(); | ||||
|         $tags     = $request->getTags(); | ||||
|         $start    = $request->getStart(); | ||||
|         $end      = $request->getEnd(); | ||||
|         $response = []; | ||||
|         $accounts   = $request->getAssetAccounts(); | ||||
|         $tags       = $request->getTags(); | ||||
|         $start      = $request->getStart(); | ||||
|         $end        = $request->getEnd(); | ||||
|         $response   = []; | ||||
| 
 | ||||
|         // get all tags:
 | ||||
|         if (0 === $tags->count()) { | ||||
| @@ -132,10 +124,11 @@ class TagController extends Controller | ||||
|         } | ||||
| 
 | ||||
|         // collect all expenses in this period (regardless of type) by the given bills and accounts.
 | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector  = app(GroupCollectorInterface::class); | ||||
|         $collector->setTypes([TransactionType::TRANSFER])->setRange($start, $end)->setDestinationAccounts($accounts); | ||||
|         $collector->setTags($tags); | ||||
|         $genericSet = $collector->getExtractedJournals(); | ||||
| 
 | ||||
|         /** @var array $journal */ | ||||
|         foreach ($genericSet as $journal) { | ||||
|             $currencyId        = (int)$journal['currency_id']; | ||||
| @@ -149,7 +142,7 @@ class TagController extends Controller | ||||
| 
 | ||||
|                 // on currency ID
 | ||||
|                 if (0 !== $currencyId) { | ||||
|                     $response[$key]                     ??= [ | ||||
|                     $response[$key] ??= [ | ||||
|                         'id'               => (string)$tagId, | ||||
|                         'name'             => $tag['name'], | ||||
|                         'difference'       => '0', | ||||
|   | ||||
| @@ -39,8 +39,6 @@ class DestroyController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -60,10 +58,6 @@ class DestroyController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/deleteAccount
 | ||||
|      * | ||||
|      * Remove the specified resource from storage. | ||||
|      * | ||||
|      * @param Account $account | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function destroy(Account $account): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -53,8 +53,6 @@ class ListController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -73,29 +71,26 @@ class ListController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/listAttachmentByAccount
 | ||||
|      * | ||||
|      * @param Account $account | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function attachments(Account $account): JsonResponse | ||||
|     { | ||||
|         $manager    = $this->getManager(); | ||||
|         $pageSize   = $this->parameters->get('limit'); | ||||
|         $collection = $this->repository->getAttachments($account); | ||||
|         $manager     = $this->getManager(); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         $collection  = $this->repository->getAttachments($account); | ||||
| 
 | ||||
|         $count       = $collection->count(); | ||||
|         $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.accounts.attachments', [$account->id]) . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.accounts.attachments', [$account->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var AttachmentTransformer $transformer */ | ||||
|         $transformer = app(AttachmentTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource    = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -105,33 +100,30 @@ class ListController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/listPiggyBankByAccount
 | ||||
|      * | ||||
|      * @param Account $account | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function piggyBanks(Account $account): JsonResponse | ||||
|     { | ||||
|         // create some objects:
 | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         // get list of budgets. Count it and split it.
 | ||||
|         $collection = $this->repository->getPiggyBanks($account); | ||||
|         $count      = $collection->count(); | ||||
|         $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $collection  = $this->repository->getPiggyBanks($account); | ||||
|         $count       = $collection->count(); | ||||
|         $piggyBanks  = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // 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   = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.accounts.piggy-banks', [$account->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var PiggyBankTransformer $transformer */ | ||||
|         $transformer = app(PiggyBankTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); | ||||
|         $resource    = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -143,28 +135,25 @@ class ListController extends Controller | ||||
|      * | ||||
|      * Show all transaction groups related to the account. | ||||
|      * | ||||
|      * | ||||
|      * @param Request $request | ||||
|      * @param Account $account | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function transactions(Request $request, Account $account): JsonResponse | ||||
|     { | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $type     = $request->get('type') ?? 'default'; | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         $type        = $request->get('type') ?? 'default'; | ||||
|         $this->parameters->set('type', $type); | ||||
|         $types   = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager = $this->getManager(); | ||||
|         $types       = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var User $admin */ | ||||
|         $admin = auth()->user(); | ||||
|         $admin       = auth()->user(); | ||||
| 
 | ||||
|         // use new group collector:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector   = app(GroupCollectorInterface::class); | ||||
|         $collector->setUser($admin)->setAccounts(new Collection([$account])) | ||||
|                   ->withAPIInformation()->setLimit($pageSize)->setPage($this->parameters->get('page'))->setTypes($types); | ||||
|             ->withAPIInformation()->setLimit($pageSize)->setPage($this->parameters->get('page'))->setTypes($types) | ||||
|         ; | ||||
| 
 | ||||
|         if (null !== $this->parameters->get('start')) { | ||||
|             $collector->setStart($this->parameters->get('start')); | ||||
| @@ -173,15 +162,15 @@ class ListController extends Controller | ||||
|             $collector->setEnd($this->parameters->get('end')); | ||||
|         } | ||||
| 
 | ||||
|         $paginator = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.accounts.transactions', [$account->id]) . $this->buildParams()); | ||||
|         $groups = $paginator->getCollection(); | ||||
|         $paginator   = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.accounts.transactions', [$account->id]).$this->buildParams()); | ||||
|         $groups      = $paginator->getCollection(); | ||||
| 
 | ||||
|         /** @var TransactionGroupTransformer $transformer */ | ||||
|         $transformer = app(TransactionGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($groups, $transformer, 'transactions'); | ||||
|         $resource    = new FractalCollection($groups, $transformer, 'transactions'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|   | ||||
| @@ -49,8 +49,6 @@ class ShowController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -71,40 +69,36 @@ class ShowController extends Controller | ||||
|      * | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @param Request $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function index(Request $request): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $type    = $request->get('type') ?? 'all'; | ||||
|         $manager     = $this->getManager(); | ||||
|         $type        = $request->get('type') ?? 'all'; | ||||
|         $this->parameters->set('type', $type); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $types    = $this->mapAccountTypes($this->parameters->get('type')); | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $types       = $this->mapAccountTypes($this->parameters->get('type')); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         // get list of accounts. Count it and split it.
 | ||||
|         $this->repository->resetAccountOrder(); | ||||
|         $collection = $this->repository->getAccountsByType($types, $this->parameters->get('sort') ?? []); | ||||
|         $count      = $collection->count(); | ||||
|         $collection  = $this->repository->getAccountsByType($types, $this->parameters->get('sort') ?? []); | ||||
|         $count       = $collection->count(); | ||||
| 
 | ||||
|         // continue sort:
 | ||||
| 
 | ||||
| 
 | ||||
|         $accounts = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $accounts    = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.accounts.index') . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.accounts.index').$this->buildParams()); | ||||
| 
 | ||||
|         /** @var AccountTransformer $transformer */ | ||||
|         $transformer = app(AccountTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($accounts, $transformer, self::RESOURCE_KEY); | ||||
|         $resource    = new FractalCollection($accounts, $transformer, self::RESOURCE_KEY); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -115,22 +109,18 @@ class ShowController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/getAccount
 | ||||
|      * | ||||
|      * Show single instance. | ||||
|      * | ||||
|      * @param Account $account | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function show(Account $account): JsonResponse | ||||
|     { | ||||
|         // get list of accounts. Count it and split it.
 | ||||
|         $this->repository->resetAccountOrder(); | ||||
|         $account->refresh(); | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var AccountTransformer $transformer */ | ||||
|         $transformer = app(AccountTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         $resource = new Item($account, $transformer, self::RESOURCE_KEY); | ||||
|         $resource    = new Item($account, $transformer, self::RESOURCE_KEY); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -41,8 +41,6 @@ class StoreController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -62,23 +60,19 @@ class StoreController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/storeAccount
 | ||||
|      * | ||||
|      * Store a new instance. | ||||
|      * | ||||
|      * @param StoreRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function store(StoreRequest $request): JsonResponse | ||||
|     { | ||||
|         $data = $request->getAllAccountData(); | ||||
|         $data        = $request->getAllAccountData(); | ||||
|         $this->repository->resetAccountOrder(); | ||||
|         $account = $this->repository->store($data); | ||||
|         $manager = $this->getManager(); | ||||
|         $account     = $this->repository->store($data); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var AccountTransformer $transformer */ | ||||
|         $transformer = app(AccountTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($account, $transformer, self::RESOURCE_KEY); | ||||
|         $resource    = new Item($account, $transformer, self::RESOURCE_KEY); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -42,8 +42,6 @@ class UpdateController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AccountController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -63,26 +61,21 @@ class UpdateController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/updateAccount
 | ||||
|      * | ||||
|      * Update account. | ||||
|      * | ||||
|      * @param UpdateRequest $request | ||||
|      * @param Account       $account | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function update(UpdateRequest $request, Account $account): JsonResponse | ||||
|     { | ||||
|         app('log')->debug(sprintf('Now in %s', __METHOD__)); | ||||
|         $data         = $request->getUpdateData(); | ||||
|         $data['type'] = config('firefly.shortNamesByFullName.' . $account->accountType->type); | ||||
|         $data['type'] = config('firefly.shortNamesByFullName.'.$account->accountType->type); | ||||
|         $account      = $this->repository->update($account, $data); | ||||
|         $manager      = $this->getManager(); | ||||
|         $account->refresh(); | ||||
|         app('preferences')->mark(); | ||||
| 
 | ||||
|         /** @var AccountTransformer $transformer */ | ||||
|         $transformer = app(AccountTransformer::class); | ||||
|         $transformer  = app(AccountTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         $resource = new Item($account, $transformer, self::RESOURCE_KEY); | ||||
|         $resource     = new Item($account, $transformer, self::RESOURCE_KEY); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -29,6 +29,8 @@ use FireflyIII\Models\Attachment; | ||||
| use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | ||||
| 
 | ||||
| /** | ||||
|  * Class DestroyController | ||||
| @@ -39,8 +41,6 @@ class DestroyController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * DestroyController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -63,14 +63,15 @@ class DestroyController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/deleteAttachment
 | ||||
|      * | ||||
|      * Remove the specified resource from storage. | ||||
|      * | ||||
|      * | ||||
|      * @param Attachment $attachment | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function destroy(Attachment $attachment): JsonResponse | ||||
|     { | ||||
|         if (true === auth()->user()->hasRole('demo')) { | ||||
|             Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); | ||||
| 
 | ||||
|             throw new NotFoundHttpException(); | ||||
|         } | ||||
| 
 | ||||
|         $this->repository->destroy($attachment); | ||||
|         app('preferences')->mark(); | ||||
| 
 | ||||
|   | ||||
| @@ -33,9 +33,11 @@ use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Http\Response as LaravelResponse; | ||||
| use Illuminate\Pagination\LengthAwarePaginator; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use League\Fractal\Pagination\IlluminatePaginatorAdapter; | ||||
| use League\Fractal\Resource\Collection as FractalCollection; | ||||
| use League\Fractal\Resource\Item; | ||||
| use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | ||||
| 
 | ||||
| /** | ||||
|  * Class ShowController | ||||
| @@ -46,8 +48,6 @@ class ShowController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * ShowController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -71,13 +71,15 @@ class ShowController extends Controller | ||||
|      * | ||||
|      * Download an attachment. | ||||
|      * | ||||
|      * @param Attachment $attachment | ||||
|      * | ||||
|      * @return LaravelResponse | ||||
|      * @throws   FireflyException | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function download(Attachment $attachment): LaravelResponse | ||||
|     { | ||||
|         if (true === auth()->user()->hasRole('demo')) { | ||||
|             Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); | ||||
| 
 | ||||
|             throw new NotFoundHttpException(); | ||||
|         } | ||||
|         if (false === $attachment->uploaded) { | ||||
|             throw new FireflyException('200000: File has not been uploaded (yet).'); | ||||
|         } | ||||
| @@ -85,27 +87,29 @@ class ShowController extends Controller | ||||
|             throw new FireflyException('200000: File has not been uploaded (yet).'); | ||||
|         } | ||||
|         if ($this->repository->exists($attachment)) { | ||||
|             $content = $this->repository->getContent($attachment); | ||||
|             $content  = $this->repository->getContent($attachment); | ||||
|             if ('' === $content) { | ||||
|                 throw new FireflyException('200002: File is empty (zero bytes).'); | ||||
|             } | ||||
|             $quoted = sprintf('"%s"', addcslashes(basename($attachment->filename), '"\\')); | ||||
|             $quoted   = sprintf('"%s"', addcslashes(basename($attachment->filename), '"\\')); | ||||
| 
 | ||||
|             /** @var LaravelResponse $response */ | ||||
|             $response = response($content); | ||||
|             $response | ||||
|                 ->header('Content-Description', 'File Transfer') | ||||
|                 ->header('Content-Type', 'application/octet-stream') | ||||
|                 ->header('Content-Disposition', 'attachment; filename=' . $quoted) | ||||
|                 ->header('Content-Disposition', 'attachment; filename='.$quoted) | ||||
|                 ->header('Content-Transfer-Encoding', 'binary') | ||||
|                 ->header('Connection', 'Keep-Alive') | ||||
|                 ->header('Expires', '0') | ||||
|                 ->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') | ||||
|                 ->header('Pragma', 'public') | ||||
|                 ->header('Content-Length', (string)strlen($content)); | ||||
|                 ->header('Content-Length', (string)strlen($content)) | ||||
|             ; | ||||
| 
 | ||||
|             return $response; | ||||
|         } | ||||
| 
 | ||||
|         throw new FireflyException('200003: File does not exist.'); | ||||
|     } | ||||
| 
 | ||||
| @@ -115,15 +119,20 @@ class ShowController extends Controller | ||||
|      * | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function index(): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         if (true === auth()->user()->hasRole('demo')) { | ||||
|             Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); | ||||
| 
 | ||||
|             throw new NotFoundHttpException(); | ||||
|         } | ||||
| 
 | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         // get list of attachments. Count it and split it.
 | ||||
|         $collection  = $this->repository->get(); | ||||
| @@ -131,14 +140,14 @@ class ShowController extends Controller | ||||
|         $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.attachments.index') . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.attachments.index').$this->buildParams()); | ||||
| 
 | ||||
|         /** @var AttachmentTransformer $transformer */ | ||||
|         $transformer = app(AttachmentTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource    = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -149,19 +158,21 @@ class ShowController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/getAttachment
 | ||||
|      * | ||||
|      * Display the specified resource. | ||||
|      * | ||||
|      * @param Attachment $attachment | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function show(Attachment $attachment): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         if (true === auth()->user()->hasRole('demo')) { | ||||
|             Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); | ||||
| 
 | ||||
|             throw new NotFoundHttpException(); | ||||
|         } | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var AttachmentTransformer $transformer */ | ||||
|         $transformer = app(AttachmentTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($attachment, $transformer, 'attachments'); | ||||
|         $resource    = new Item($attachment, $transformer, 'attachments'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -34,7 +34,9 @@ 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 Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | ||||
| 
 | ||||
| /** | ||||
|  * Class StoreController | ||||
| @@ -45,8 +47,6 @@ class StoreController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * StoreController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -70,38 +70,40 @@ class StoreController extends Controller | ||||
|      * | ||||
|      * Store a newly created resource in storage. | ||||
|      * | ||||
|      * @param StoreRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function store(StoreRequest $request): JsonResponse | ||||
|     { | ||||
|         if (true === auth()->user()->hasRole('demo')) { | ||||
|             Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); | ||||
| 
 | ||||
|             throw new NotFoundHttpException(); | ||||
|         } | ||||
|         app('log')->debug(sprintf('Now in %s', __METHOD__)); | ||||
|         $data       = $request->getAll(); | ||||
|         $attachment = $this->repository->store($data); | ||||
|         $manager    = $this->getManager(); | ||||
|         $data        = $request->getAll(); | ||||
|         $attachment  = $this->repository->store($data); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var AttachmentTransformer $transformer */ | ||||
|         $transformer = app(AttachmentTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($attachment, $transformer, 'attachments'); | ||||
|         $resource    = new Item($attachment, $transformer, 'attachments'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Upload an attachment. | ||||
|      * | ||||
|      * | ||||
|      * @param Request    $request | ||||
|      * @param Attachment $attachment | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function upload(Request $request, Attachment $attachment): JsonResponse | ||||
|     { | ||||
|         if (true === auth()->user()->hasRole('demo')) { | ||||
|             Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); | ||||
| 
 | ||||
|             throw new NotFoundHttpException(); | ||||
|         } | ||||
| 
 | ||||
|         /** @var AttachmentHelperInterface $helper */ | ||||
|         $helper = app(AttachmentHelperInterface::class); | ||||
|         $body   = $request->getContent(); | ||||
|   | ||||
| @@ -31,7 +31,9 @@ use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface; | ||||
| use FireflyIII\Transformers\AttachmentTransformer; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use League\Fractal\Resource\Item; | ||||
| use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | ||||
| 
 | ||||
| /** | ||||
|  * Class UpdateController | ||||
| @@ -42,8 +44,6 @@ class UpdateController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * UpdateController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -66,23 +66,23 @@ class UpdateController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/updateAttachment
 | ||||
|      * | ||||
|      * Update the specified resource in storage. | ||||
|      * | ||||
|      * @param UpdateRequest $request | ||||
|      * @param Attachment    $attachment | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function update(UpdateRequest $request, Attachment $attachment): JsonResponse | ||||
|     { | ||||
|         $data = $request->getAll(); | ||||
|         if (true === auth()->user()->hasRole('demo')) { | ||||
|             Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); | ||||
| 
 | ||||
|             throw new NotFoundHttpException(); | ||||
|         } | ||||
|         $data        = $request->getAll(); | ||||
|         $this->repository->update($attachment, $data); | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var AttachmentTransformer $transformer */ | ||||
|         $transformer = app(AttachmentTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($attachment, $transformer, 'attachments'); | ||||
|         $resource    = new Item($attachment, $transformer, 'attachments'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -44,8 +44,6 @@ class ShowController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * AvailableBudgetController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -68,18 +66,17 @@ class ShowController extends Controller | ||||
|      * | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function index(): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager          = $this->getManager(); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize         = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         $start = $this->parameters->get('start'); | ||||
|         $end   = $this->parameters->get('end'); | ||||
|         $start            = $this->parameters->get('start'); | ||||
|         $end              = $this->parameters->get('end'); | ||||
| 
 | ||||
|         // get list of available budgets. Count it and split it.
 | ||||
|         $collection       = $this->abRepository->getAvailableBudgetsByDate($start, $end); | ||||
| @@ -87,14 +84,14 @@ class ShowController extends Controller | ||||
|         $availableBudgets = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.available-budgets.index') . $this->buildParams()); | ||||
|         $paginator        = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.available-budgets.index').$this->buildParams()); | ||||
| 
 | ||||
|         /** @var AvailableBudgetTransformer $transformer */ | ||||
|         $transformer = app(AvailableBudgetTransformer::class); | ||||
|         $transformer      = app(AvailableBudgetTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($availableBudgets, $transformer, 'available_budgets'); | ||||
|         $resource         = new FractalCollection($availableBudgets, $transformer, 'available_budgets'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -105,20 +102,16 @@ class ShowController extends Controller | ||||
|      * 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 | ||||
|      */ | ||||
|     public function show(AvailableBudget $availableBudget): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var AvailableBudgetTransformer $transformer */ | ||||
|         $transformer = app(AvailableBudgetTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($availableBudget, $transformer, 'available_budgets'); | ||||
|         $resource    = new Item($availableBudget, $transformer, 'available_budgets'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -37,8 +37,6 @@ class DestroyController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * BillController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -58,10 +56,6 @@ class DestroyController extends Controller | ||||
|      * 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 | ||||
|      */ | ||||
|     public function destroy(Bill $bill): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -50,8 +50,6 @@ class ListController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * BillController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -72,29 +70,26 @@ class ListController extends Controller | ||||
|      * | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @param Bill $bill | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function attachments(Bill $bill): JsonResponse | ||||
|     { | ||||
|         $manager    = $this->getManager(); | ||||
|         $pageSize   = $this->parameters->get('limit'); | ||||
|         $collection = $this->repository->getAttachments($bill); | ||||
|         $manager     = $this->getManager(); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         $collection  = $this->repository->getAttachments($bill); | ||||
| 
 | ||||
|         $count       = $collection->count(); | ||||
|         $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.bills.attachments', [$bill->id]) . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.bills.attachments', [$bill->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var AttachmentTransformer $transformer */ | ||||
|         $transformer = app(AttachmentTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource    = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -106,31 +101,28 @@ class ListController extends Controller | ||||
|      * | ||||
|      * List all of them. | ||||
|      * | ||||
|      * @param Bill $bill | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function rules(Bill $bill): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         // get list of budgets. Count it and split it.
 | ||||
|         $collection = $this->repository->getRulesForBill($bill); | ||||
|         $count      = $collection->count(); | ||||
|         $rules      = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $collection  = $this->repository->getRulesForBill($bill); | ||||
|         $count       = $collection->count(); | ||||
|         $rules       = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.bills.rules', [$bill->id]) . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.bills.rules', [$bill->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var RuleTransformer $transformer */ | ||||
|         $transformer = app(RuleTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         $resource = new FractalCollection($rules, $transformer, 'rules'); | ||||
|         $resource    = new FractalCollection($rules, $transformer, 'rules'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -142,28 +134,23 @@ class ListController extends Controller | ||||
|      * | ||||
|      * Show all transactions. | ||||
|      * | ||||
|      * @param Request $request | ||||
|      * | ||||
|      * @param Bill    $bill | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function transactions(Request $request, Bill $bill): JsonResponse | ||||
|     { | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $type     = $request->get('type') ?? 'default'; | ||||
|         $pageSize     = $this->parameters->get('limit'); | ||||
|         $type         = $request->get('type') ?? 'default'; | ||||
|         $this->parameters->set('type', $type); | ||||
| 
 | ||||
|         $types   = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager = $this->getManager(); | ||||
|         $types        = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager      = $this->getManager(); | ||||
| 
 | ||||
|         /** @var User $admin */ | ||||
|         $admin = auth()->user(); | ||||
|         $admin        = auth()->user(); | ||||
| 
 | ||||
|         // use new group collector:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector    = app(GroupCollectorInterface::class); | ||||
|         $collector | ||||
|             ->setUser($admin) | ||||
|             // include source + destination account name and type.
 | ||||
| @@ -175,7 +162,8 @@ class ListController extends Controller | ||||
|             // set page to retrieve
 | ||||
|             ->setPage($this->parameters->get('page')) | ||||
|             // set types of transactions to return.
 | ||||
|             ->setTypes($types); | ||||
|             ->setTypes($types) | ||||
|         ; | ||||
| 
 | ||||
|         if (null !== $this->parameters->get('start')) { | ||||
|             $collector->setStart($this->parameters->get('start')); | ||||
| @@ -185,15 +173,15 @@ class ListController extends Controller | ||||
|         } | ||||
| 
 | ||||
|         // get paginator.
 | ||||
|         $paginator = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.bills.transactions', [$bill->id]) . $this->buildParams()); | ||||
|         $paginator    = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.bills.transactions', [$bill->id]).$this->buildParams()); | ||||
|         $transactions = $paginator->getCollection(); | ||||
| 
 | ||||
|         /** @var TransactionGroupTransformer $transformer */ | ||||
|         $transformer = app(TransactionGroupTransformer::class); | ||||
|         $transformer  = app(TransactionGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource     = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|   | ||||
| @@ -43,8 +43,6 @@ class ShowController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * BillController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -65,24 +63,23 @@ class ShowController extends Controller | ||||
|      * | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function index(): JsonResponse | ||||
|     { | ||||
|         $this->repository->correctOrder(); | ||||
|         $bills     = $this->repository->getBills(); | ||||
|         $manager   = $this->getManager(); | ||||
|         $pageSize  = $this->parameters->get('limit'); | ||||
|         $count     = $bills->count(); | ||||
|         $bills     = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $bills       = $this->repository->getBills(); | ||||
|         $manager     = $this->getManager(); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         $count       = $bills->count(); | ||||
|         $bills       = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $paginator   = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); | ||||
| 
 | ||||
|         /** @var BillTransformer $transformer */ | ||||
|         $transformer = app(BillTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($bills, $transformer, 'bills'); | ||||
|         $resource    = new FractalCollection($bills, $transformer, 'bills'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -93,19 +90,16 @@ class ShowController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/getBill
 | ||||
|      * | ||||
|      * Show the specified bill. | ||||
|      * | ||||
|      * @param Bill $bill | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function show(Bill $bill): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var BillTransformer $transformer */ | ||||
|         $transformer = app(BillTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($bill, $transformer, 'bills'); | ||||
|         $resource    = new Item($bill, $transformer, 'bills'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -43,8 +43,6 @@ class StoreController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * BillController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -65,22 +63,19 @@ class StoreController extends Controller | ||||
|      * | ||||
|      * Store a bill. | ||||
|      * | ||||
|      * @param StoreRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function store(StoreRequest $request): JsonResponse | ||||
|     { | ||||
|         $data    = $request->getAll(); | ||||
|         $bill    = $this->repository->store($data); | ||||
|         $manager = $this->getManager(); | ||||
|         $data        = $request->getAll(); | ||||
|         $bill        = $this->repository->store($data); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var BillTransformer $transformer */ | ||||
|         $transformer = app(BillTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($bill, $transformer, 'bills'); | ||||
|         $resource    = new Item($bill, $transformer, 'bills'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -40,8 +40,6 @@ class UpdateController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * BillController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -61,23 +59,18 @@ class UpdateController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/updateBill
 | ||||
|      * | ||||
|      * Update a bill. | ||||
|      * | ||||
|      * @param UpdateRequest $request | ||||
|      * @param Bill          $bill | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function update(UpdateRequest $request, Bill $bill): JsonResponse | ||||
|     { | ||||
|         $data    = $request->getAll(); | ||||
|         $bill    = $this->repository->update($bill, $data); | ||||
|         $manager = $this->getManager(); | ||||
|         $data        = $request->getAll(); | ||||
|         $bill        = $this->repository->update($bill, $data); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var BillTransformer $transformer */ | ||||
|         $transformer = app(BillTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($bill, $transformer, 'bills'); | ||||
|         $resource    = new Item($bill, $transformer, 'bills'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -37,8 +37,6 @@ class DestroyController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * DestroyController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -58,10 +56,6 @@ class DestroyController extends Controller | ||||
|      * 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 | ||||
|      */ | ||||
|     public function destroy(Budget $budget): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -40,9 +40,7 @@ use Illuminate\Pagination\LengthAwarePaginator; | ||||
| use League\Fractal\Pagination\IlluminatePaginatorAdapter; | ||||
| use League\Fractal\Resource\Collection as FractalCollection; | ||||
| 
 | ||||
| /*** | ||||
|  * Class ListController | ||||
|  */ | ||||
| // Class ListController
 | ||||
| class ListController extends Controller | ||||
| { | ||||
|     use TransactionFilter; | ||||
| @@ -52,8 +50,6 @@ class ListController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * ListController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -74,29 +70,26 @@ class ListController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listAttachmentByBudget
 | ||||
|      * | ||||
|      * @param Budget $budget | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function attachments(Budget $budget): JsonResponse | ||||
|     { | ||||
|         $manager    = $this->getManager(); | ||||
|         $pageSize   = $this->parameters->get('limit'); | ||||
|         $collection = $this->repository->getAttachments($budget); | ||||
|         $manager     = $this->getManager(); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         $collection  = $this->repository->getAttachments($budget); | ||||
| 
 | ||||
|         $count       = $collection->count(); | ||||
|         $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.budgets.attachments', [$budget->id]) . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.budgets.attachments', [$budget->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var AttachmentTransformer $transformer */ | ||||
|         $transformer = app(AttachmentTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource    = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -108,26 +101,23 @@ class ListController extends Controller | ||||
|      * | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @param Budget $budget | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function budgetLimits(Budget $budget): JsonResponse | ||||
|     { | ||||
|         $manager  = $this->getManager(); | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $manager      = $this->getManager(); | ||||
|         $pageSize     = $this->parameters->get('limit'); | ||||
|         $this->parameters->set('budget_id', $budget->id); | ||||
|         $collection   = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end')); | ||||
|         $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); | ||||
|         $transformer  = app(BudgetLimitTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); | ||||
|         $resource     = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -139,29 +129,24 @@ class ListController extends Controller | ||||
|      * | ||||
|      * Show all transactions. | ||||
|      * | ||||
|      * @param Request $request | ||||
|      * | ||||
|      * @param Budget  $budget | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function transactions(Request $request, Budget $budget): JsonResponse | ||||
|     { | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize     = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         $type = $request->get('type') ?? 'default'; | ||||
|         $type         = $request->get('type') ?? 'default'; | ||||
|         $this->parameters->set('type', $type); | ||||
| 
 | ||||
|         $types   = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager = $this->getManager(); | ||||
|         $types        = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager      = $this->getManager(); | ||||
| 
 | ||||
|         /** @var User $admin */ | ||||
|         $admin = auth()->user(); | ||||
|         $admin        = auth()->user(); | ||||
| 
 | ||||
|         // use new group collector:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector    = app(GroupCollectorInterface::class); | ||||
|         $collector | ||||
|             ->setUser($admin) | ||||
|             // filter on budget.
 | ||||
| @@ -173,7 +158,8 @@ class ListController extends Controller | ||||
|             // set page to retrieve
 | ||||
|             ->setPage($this->parameters->get('page')) | ||||
|             // set types of transactions to return.
 | ||||
|             ->setTypes($types); | ||||
|             ->setTypes($types) | ||||
|         ; | ||||
| 
 | ||||
|         if (null !== $this->parameters->get('start')) { | ||||
|             $collector->setStart($this->parameters->get('start')); | ||||
| @@ -182,14 +168,14 @@ class ListController extends Controller | ||||
|             $collector->setEnd($this->parameters->get('end')); | ||||
|         } | ||||
| 
 | ||||
|         $paginator = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.budgets.transactions', [$budget->id]) . $this->buildParams()); | ||||
|         $paginator    = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.budgets.transactions', [$budget->id]).$this->buildParams()); | ||||
|         $transactions = $paginator->getCollection(); | ||||
| 
 | ||||
|         /** @var TransactionGroupTransformer $transformer */ | ||||
|         $transformer = app(TransactionGroupTransformer::class); | ||||
|         $transformer  = app(TransactionGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         $resource = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource     = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -201,27 +187,24 @@ class ListController extends Controller | ||||
|      * | ||||
|      * Show all transactions. | ||||
|      * | ||||
|      * @param Request $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function withoutBudget(Request $request): JsonResponse | ||||
|     { | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize     = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         $type = $request->get('type') ?? 'default'; | ||||
|         $type         = $request->get('type') ?? 'default'; | ||||
|         $this->parameters->set('type', $type); | ||||
| 
 | ||||
|         $types   = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager = $this->getManager(); | ||||
|         $types        = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager      = $this->getManager(); | ||||
| 
 | ||||
|         /** @var User $admin */ | ||||
|         $admin = auth()->user(); | ||||
|         $admin        = auth()->user(); | ||||
| 
 | ||||
|         // use new group collector:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector    = app(GroupCollectorInterface::class); | ||||
|         $collector | ||||
|             ->setUser($admin) | ||||
|             // filter on budget.
 | ||||
| @@ -233,7 +216,8 @@ class ListController extends Controller | ||||
|             // set page to retrieve
 | ||||
|             ->setPage($this->parameters->get('page')) | ||||
|             // set types of transactions to return.
 | ||||
|             ->setTypes($types); | ||||
|             ->setTypes($types) | ||||
|         ; | ||||
| 
 | ||||
|         if (null !== $this->parameters->get('start')) { | ||||
|             $collector->setStart($this->parameters->get('start')); | ||||
| @@ -242,14 +226,14 @@ class ListController extends Controller | ||||
|             $collector->setEnd($this->parameters->get('end')); | ||||
|         } | ||||
| 
 | ||||
|         $paginator = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.budgets.without-budget') . $this->buildParams()); | ||||
|         $paginator    = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.budgets.without-budget').$this->buildParams()); | ||||
|         $transactions = $paginator->getCollection(); | ||||
| 
 | ||||
|         /** @var TransactionGroupTransformer $transformer */ | ||||
|         $transformer = app(TransactionGroupTransformer::class); | ||||
|         $transformer  = app(TransactionGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         $resource = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource     = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|   | ||||
| @@ -45,8 +45,6 @@ class ShowController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * ListController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -69,30 +67,29 @@ class ShowController extends Controller | ||||
|      * | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function index(): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         // get list of budgets. Count it and split it.
 | ||||
|         $collection = $this->repository->getBudgets(); | ||||
|         $count      = $collection->count(); | ||||
|         $budgets    = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $collection  = $this->repository->getBudgets(); | ||||
|         $count       = $collection->count(); | ||||
|         $budgets     = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($budgets, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.budgets.index') . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($budgets, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.budgets.index').$this->buildParams()); | ||||
| 
 | ||||
|         /** @var BudgetTransformer $transformer */ | ||||
|         $transformer = app(BudgetTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($budgets, $transformer, 'budgets'); | ||||
|         $resource    = new FractalCollection($budgets, $transformer, 'budgets'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -100,20 +97,16 @@ class ShowController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * Show a budget. | ||||
|      * | ||||
|      * @param Budget $budget | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function show(Budget $budget): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var BudgetTransformer $transformer */ | ||||
|         $transformer = app(BudgetTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($budget, $transformer, 'budgets'); | ||||
|         $resource    = new Item($budget, $transformer, 'budgets'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -40,8 +40,6 @@ class StoreController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * StoreController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -62,23 +60,19 @@ class StoreController extends Controller | ||||
|      * | ||||
|      * Store a budget. | ||||
|      * | ||||
|      * @param StoreRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      * | ||||
|      */ | ||||
|     public function store(StoreRequest $request): JsonResponse | ||||
|     { | ||||
|         $budget = $this->repository->store($request->getAll()); | ||||
|         $budget      = $this->repository->store($request->getAll()); | ||||
|         $budget->refresh(); | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var BudgetTransformer $transformer */ | ||||
|         $transformer = app(BudgetTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($budget, $transformer, 'budgets'); | ||||
|         $resource    = new Item($budget, $transformer, 'budgets'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -40,8 +40,6 @@ class UpdateController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * UpdateController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -61,23 +59,18 @@ class UpdateController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/updateBudget
 | ||||
|      * | ||||
|      * Update a budget. | ||||
|      * | ||||
|      * @param UpdateRequest $request | ||||
|      * @param Budget        $budget | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function update(UpdateRequest $request, Budget $budget): JsonResponse | ||||
|     { | ||||
|         $data    = $request->getAll(); | ||||
|         $budget  = $this->repository->update($budget, $data); | ||||
|         $manager = $this->getManager(); | ||||
|         $data        = $request->getAll(); | ||||
|         $budget      = $this->repository->update($budget, $data); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var BudgetTransformer $transformer */ | ||||
|         $transformer = app(BudgetTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($budget, $transformer, 'budgets'); | ||||
|         $resource    = new Item($budget, $transformer, 'budgets'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -40,8 +40,6 @@ class DestroyController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * BudgetLimitController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -64,10 +62,6 @@ class DestroyController extends Controller | ||||
|      * | ||||
|      * Remove the specified resource from storage. | ||||
|      * | ||||
|      * @param Budget      $budget | ||||
|      * @param BudgetLimit $budgetLimit | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function destroy(Budget $budget, BudgetLimit $budgetLimit): JsonResponse | ||||
|   | ||||
| @@ -48,28 +48,23 @@ class ListController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listTransactionByBudgetLimit
 | ||||
|      * Show all transactions. | ||||
|      * | ||||
|      * @param Request     $request | ||||
|      * @param Budget      $budget | ||||
|      * @param BudgetLimit $budgetLimit | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function transactions(Request $request, Budget $budget, BudgetLimit $budgetLimit): JsonResponse | ||||
|     { | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $type     = $request->get('type') ?? 'default'; | ||||
|         $pageSize     = $this->parameters->get('limit'); | ||||
|         $type         = $request->get('type') ?? 'default'; | ||||
|         $this->parameters->set('type', $type); | ||||
| 
 | ||||
|         $types   = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager = $this->getManager(); | ||||
|         $types        = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager      = $this->getManager(); | ||||
| 
 | ||||
|         /** @var User $admin */ | ||||
|         $admin = auth()->user(); | ||||
|         $admin        = auth()->user(); | ||||
| 
 | ||||
|         // use new group collector:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector    = app(GroupCollectorInterface::class); | ||||
|         $collector | ||||
|             ->setUser($admin) | ||||
|             // filter on budget.
 | ||||
| @@ -81,19 +76,20 @@ class ListController extends Controller | ||||
|             // set page to retrieve
 | ||||
|             ->setPage($this->parameters->get('page')) | ||||
|             // set types of transactions to return.
 | ||||
|             ->setTypes($types); | ||||
|             ->setTypes($types) | ||||
|         ; | ||||
| 
 | ||||
|         $collector->setRange($budgetLimit->start_date, $budgetLimit->end_date); | ||||
|         $collector->setTypes($types); | ||||
|         $paginator = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.budgets.limits.transactions', [$budget->id, $budgetLimit->id]) . $this->buildParams()); | ||||
|         $paginator    = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.budgets.limits.transactions', [$budget->id, $budgetLimit->id]).$this->buildParams()); | ||||
|         $transactions = $paginator->getCollection(); | ||||
| 
 | ||||
|         /** @var TransactionGroupTransformer $transformer */ | ||||
|         $transformer = app(TransactionGroupTransformer::class); | ||||
|         $transformer  = app(TransactionGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource     = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|   | ||||
| @@ -48,8 +48,6 @@ class ShowController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * BudgetLimitController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -73,27 +71,23 @@ class ShowController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listBudgetLimitByBudget
 | ||||
|      * | ||||
|      * Display a listing of the budget limits for this budget. | ||||
|      * | ||||
|      * @param Budget $budget | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function index(Budget $budget): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager      = $this->getManager(); | ||||
|         $manager->parseIncludes('budget'); | ||||
|         $pageSize     = $this->parameters->get('limit'); | ||||
|         $collection   = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end')); | ||||
|         $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.limits.index', [$budget->id]) . $this->buildParams()); | ||||
|         $paginator->setPath(route('api.v1.budgets.limits.index', [$budget->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var BudgetLimitTransformer $transformer */ | ||||
|         $transformer = app(BudgetLimitTransformer::class); | ||||
|         $transformer  = app(BudgetLimitTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); | ||||
|         $resource     = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -105,27 +99,24 @@ class ShowController extends Controller | ||||
|      * | ||||
|      * Display a listing of the budget limits for this budget. | ||||
|      * | ||||
|      * @param SameDateRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @SuppressWarnings(PHPMD.UnusedFormalParameter) | ||||
|      */ | ||||
|     public function indexAll(SameDateRequest $request): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager      = $this->getManager(); | ||||
|         $manager->parseIncludes('budget'); | ||||
|         $pageSize     = $this->parameters->get('limit'); | ||||
|         $collection   = $this->blRepository->getAllBudgetLimits($this->parameters->get('start'), $this->parameters->get('end')); | ||||
|         $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.budget-limits.index') . $this->buildParams()); | ||||
|         $paginator->setPath(route('api.v1.budget-limits.index').$this->buildParams()); | ||||
| 
 | ||||
|         /** @var BudgetLimitTransformer $transformer */ | ||||
|         $transformer = app(BudgetLimitTransformer::class); | ||||
|         $transformer  = app(BudgetLimitTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); | ||||
|         $resource     = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -135,10 +126,6 @@ class ShowController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/getBudgetLimit
 | ||||
|      * | ||||
|      * @param Budget      $budget | ||||
|      * @param BudgetLimit $budgetLimit | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function show(Budget $budget, BudgetLimit $budgetLimit): JsonResponse | ||||
| @@ -147,13 +134,13 @@ class ShowController extends Controller | ||||
|             throw new FireflyException('20028: The budget limit does not belong to the budget.'); | ||||
|         } | ||||
|         // continue!
 | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var BudgetLimitTransformer $transformer */ | ||||
|         $transformer = app(BudgetLimitTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($budgetLimit, $transformer, 'budget_limits'); | ||||
|         $resource    = new Item($budgetLimit, $transformer, 'budget_limits'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -41,8 +41,6 @@ class StoreController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * BudgetLimitController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -64,11 +62,6 @@ class StoreController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/storeBudgetLimit
 | ||||
|      * | ||||
|      * Store a newly created resource in storage. | ||||
|      * | ||||
|      * @param StoreRequest $request | ||||
|      * @param Budget       $budget | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function store(StoreRequest $request, Budget $budget): JsonResponse | ||||
|     { | ||||
| @@ -77,13 +70,14 @@ class StoreController extends Controller | ||||
|         $data['end_date']   = $data['end']; | ||||
|         $data['budget_id']  = $budget->id; | ||||
| 
 | ||||
|         $budgetLimit = $this->blRepository->store($data); | ||||
|         $manager     = $this->getManager(); | ||||
|         $budgetLimit        = $this->blRepository->store($data); | ||||
|         $manager            = $this->getManager(); | ||||
| 
 | ||||
|         /** @var BudgetLimitTransformer $transformer */ | ||||
|         $transformer = app(BudgetLimitTransformer::class); | ||||
|         $transformer        = app(BudgetLimitTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($budgetLimit, $transformer, 'budget_limits'); | ||||
|         $resource           = new Item($budgetLimit, $transformer, 'budget_limits'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -46,8 +46,6 @@ class UpdateController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/updateBudgetLimit
 | ||||
|      * | ||||
|      * BudgetLimitController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -69,11 +67,6 @@ class UpdateController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/updateBudgetLimit
 | ||||
|      * | ||||
|      * @param UpdateRequest $request | ||||
|      * @param Budget        $budget | ||||
|      * @param BudgetLimit   $budgetLimit | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function update(UpdateRequest $request, Budget $budget, BudgetLimit $budgetLimit): JsonResponse | ||||
| @@ -87,10 +80,10 @@ class UpdateController extends Controller | ||||
|         $manager           = $this->getManager(); | ||||
| 
 | ||||
|         /** @var BudgetLimitTransformer $transformer */ | ||||
|         $transformer = app(BudgetLimitTransformer::class); | ||||
|         $transformer       = app(BudgetLimitTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($budgetLimit, $transformer, 'budget_limits'); | ||||
|         $resource          = new Item($budgetLimit, $transformer, 'budget_limits'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -37,8 +37,6 @@ class DestroyController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * CategoryController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -58,10 +56,6 @@ class DestroyController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/deleteCategory
 | ||||
|      * | ||||
|      * Remove the specified resource from storage. | ||||
|      * | ||||
|      * @param Category $category | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function destroy(Category $category): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -49,8 +49,6 @@ class ListController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * CategoryController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -69,29 +67,26 @@ class ListController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/listAttachmentByCategory
 | ||||
|      * | ||||
|      * @param Category $category | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function attachments(Category $category): JsonResponse | ||||
|     { | ||||
|         $manager    = $this->getManager(); | ||||
|         $pageSize   = $this->parameters->get('limit'); | ||||
|         $collection = $this->repository->getAttachments($category); | ||||
|         $manager     = $this->getManager(); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         $collection  = $this->repository->getAttachments($category); | ||||
| 
 | ||||
|         $count       = $collection->count(); | ||||
|         $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.categories.attachments', [$category->id]) . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.categories.attachments', [$category->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var AttachmentTransformer $transformer */ | ||||
|         $transformer = app(AttachmentTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource    = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -103,28 +98,23 @@ class ListController extends Controller | ||||
|      * | ||||
|      * Show all transactions. | ||||
|      * | ||||
|      * @param Request  $request | ||||
|      * | ||||
|      * @param Category $category | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function transactions(Request $request, Category $category): JsonResponse | ||||
|     { | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $type     = $request->get('type') ?? 'default'; | ||||
|         $pageSize     = $this->parameters->get('limit'); | ||||
|         $type         = $request->get('type') ?? 'default'; | ||||
|         $this->parameters->set('type', $type); | ||||
| 
 | ||||
|         $types   = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager = $this->getManager(); | ||||
|         $types        = $this->mapTransactionTypes($this->parameters->get('type')); | ||||
|         $manager      = $this->getManager(); | ||||
| 
 | ||||
|         /** @var User $admin */ | ||||
|         $admin = auth()->user(); | ||||
|         $admin        = auth()->user(); | ||||
| 
 | ||||
|         // use new group collector:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector    = app(GroupCollectorInterface::class); | ||||
|         $collector | ||||
|             ->setUser($admin) | ||||
|             // filter on category.
 | ||||
| @@ -136,7 +126,8 @@ class ListController extends Controller | ||||
|             // set page to retrieve
 | ||||
|             ->setPage($this->parameters->get('page')) | ||||
|             // set types of transactions to return.
 | ||||
|             ->setTypes($types); | ||||
|             ->setTypes($types) | ||||
|         ; | ||||
| 
 | ||||
|         if (null !== $this->parameters->get('start')) { | ||||
|             $collector->setStart($this->parameters->get('start')); | ||||
| @@ -145,15 +136,15 @@ class ListController extends Controller | ||||
|             $collector->setEnd($this->parameters->get('end')); | ||||
|         } | ||||
| 
 | ||||
|         $paginator = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.categories.transactions', [$category->id]) . $this->buildParams()); | ||||
|         $paginator    = $collector->getPaginatedGroups(); | ||||
|         $paginator->setPath(route('api.v1.categories.transactions', [$category->id]).$this->buildParams()); | ||||
|         $transactions = $paginator->getCollection(); | ||||
| 
 | ||||
|         /** @var TransactionGroupTransformer $transformer */ | ||||
|         $transformer = app(TransactionGroupTransformer::class); | ||||
|         $transformer  = app(TransactionGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource     = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|   | ||||
| @@ -43,8 +43,6 @@ class ShowController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * CategoryController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -65,29 +63,28 @@ class ShowController extends Controller | ||||
|      * | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function index(): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         // get list of budgets. Count it and split it.
 | ||||
|         $collection = $this->repository->getCategories(); | ||||
|         $count      = $collection->count(); | ||||
|         $categories = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $collection  = $this->repository->getCategories(); | ||||
|         $count       = $collection->count(); | ||||
|         $categories  = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($categories, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.categories.index') . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($categories, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.categories.index').$this->buildParams()); | ||||
| 
 | ||||
|         /** @var CategoryTransformer $transformer */ | ||||
|         $transformer = app(CategoryTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         $resource = new FractalCollection($categories, $transformer, 'categories'); | ||||
|         $resource    = new FractalCollection($categories, $transformer, 'categories'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -98,20 +95,16 @@ class ShowController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/getCategory
 | ||||
|      * | ||||
|      * Show the category. | ||||
|      * | ||||
|      * @param Category $category | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function show(Category $category): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var CategoryTransformer $transformer */ | ||||
|         $transformer = app(CategoryTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($category, $transformer, 'categories'); | ||||
|         $resource    = new Item($category, $transformer, 'categories'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -40,8 +40,6 @@ class StoreController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * CategoryController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -62,21 +60,18 @@ class StoreController extends Controller | ||||
|      * | ||||
|      * Store new category. | ||||
|      * | ||||
|      * @param StoreRequest $request | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function store(StoreRequest $request): JsonResponse | ||||
|     { | ||||
|         $category = $this->repository->store($request->getAll()); | ||||
|         $manager  = $this->getManager(); | ||||
|         $category    = $this->repository->store($request->getAll()); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var CategoryTransformer $transformer */ | ||||
|         $transformer = app(CategoryTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($category, $transformer, 'categories'); | ||||
|         $resource    = new Item($category, $transformer, 'categories'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -40,8 +40,6 @@ class UpdateController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * CategoryController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -61,23 +59,18 @@ class UpdateController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/updateCategory
 | ||||
|      * | ||||
|      * Update the category. | ||||
|      * | ||||
|      * @param UpdateRequest $request | ||||
|      * @param Category      $category | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function update(UpdateRequest $request, Category $category): JsonResponse | ||||
|     { | ||||
|         $data     = $request->getAll(); | ||||
|         $category = $this->repository->update($category, $data); | ||||
|         $manager  = $this->getManager(); | ||||
|         $data        = $request->getAll(); | ||||
|         $category    = $this->repository->update($category, $data); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var CategoryTransformer $transformer */ | ||||
|         $transformer = app(CategoryTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new Item($category, $transformer, 'categories'); | ||||
|         $resource    = new Item($category, $transformer, 'categories'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -38,8 +38,6 @@ class DestroyController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * ObjectGroupController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -61,10 +59,6 @@ class DestroyController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/object_groups/deleteObjectGroup
 | ||||
|      * | ||||
|      * Remove the specified resource from storage. | ||||
|      * | ||||
|      * @param ObjectGroup $objectGroup | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function destroy(ObjectGroup $objectGroup): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -44,8 +44,6 @@ class ListController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * ObjectGroupController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -68,30 +66,27 @@ class ListController extends Controller | ||||
|      * | ||||
|      * List all bills in this object group | ||||
|      * | ||||
|      * @param ObjectGroup $objectGroup | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function bills(ObjectGroup $objectGroup): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         // get list of piggy banks. Count it and split it.
 | ||||
|         $collection = $this->repository->getBills($objectGroup); | ||||
|         $count      = $collection->count(); | ||||
|         $bills      = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $collection  = $this->repository->getBills($objectGroup); | ||||
|         $count       = $collection->count(); | ||||
|         $bills       = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.currencies.bills', [$objectGroup->id]) . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.currencies.bills', [$objectGroup->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var BillTransformer $transformer */ | ||||
|         $transformer = app(BillTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($bills, $transformer, 'bills'); | ||||
|         $resource    = new FractalCollection($bills, $transformer, 'bills'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -103,33 +98,30 @@ class ListController extends Controller | ||||
|      * | ||||
|      * List all piggies under the object group. | ||||
|      * | ||||
|      * @param ObjectGroup $objectGroup | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function piggyBanks(ObjectGroup $objectGroup): JsonResponse | ||||
|     { | ||||
|         // create some objects:
 | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         // get list of piggy banks. Count it and split it.
 | ||||
|         $collection = $this->repository->getPiggyBanks($objectGroup); | ||||
|         $count      = $collection->count(); | ||||
|         $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $collection  = $this->repository->getPiggyBanks($objectGroup); | ||||
|         $count       = $collection->count(); | ||||
|         $piggyBanks  = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.object-groups.piggy-banks', [$objectGroup->id]) . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.object-groups.piggy-banks', [$objectGroup->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var PiggyBankTransformer $transformer */ | ||||
|         $transformer = app(PiggyBankTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); | ||||
|         $resource    = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|   | ||||
| @@ -43,8 +43,6 @@ class ShowController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * ObjectGroupController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -66,15 +64,13 @@ class ShowController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/object_groups/listObjectGroups
 | ||||
|      * | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function index(): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager      = $this->getManager(); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $pageSize     = $this->parameters->get('limit'); | ||||
| 
 | ||||
|         $this->repository->resetOrder(); | ||||
|         $collection   = $this->repository->get(); | ||||
| @@ -82,14 +78,14 @@ class ShowController extends Controller | ||||
|         $objectGroups = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($objectGroups, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.object-groups.index') . $this->buildParams()); | ||||
|         $paginator    = new LengthAwarePaginator($objectGroups, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.object-groups.index').$this->buildParams()); | ||||
| 
 | ||||
|         /** @var ObjectGroupTransformer $transformer */ | ||||
|         $transformer = app(ObjectGroupTransformer::class); | ||||
|         $transformer  = app(ObjectGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($objectGroups, $transformer, 'object_groups'); | ||||
|         $resource     = new FractalCollection($objectGroups, $transformer, 'object_groups'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -100,21 +96,17 @@ class ShowController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/object_groups/getObjectGroup
 | ||||
|      * | ||||
|      * Show single instance. | ||||
|      * | ||||
|      * @param ObjectGroup $objectGroup | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function show(ObjectGroup $objectGroup): JsonResponse | ||||
|     { | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
|         $this->repository->resetOrder(); | ||||
|         $objectGroup->refresh(); | ||||
| 
 | ||||
|         /** @var ObjectGroupTransformer $transformer */ | ||||
|         $transformer = app(ObjectGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         $resource = new Item($objectGroup, $transformer, 'object_groups'); | ||||
|         $resource    = new Item($objectGroup, $transformer, 'object_groups'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -41,8 +41,6 @@ class UpdateController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * ObjectGroupController constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -62,23 +60,18 @@ class UpdateController extends Controller | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/object_groups/updateObjectGroup
 | ||||
|      * | ||||
|      * @param UpdateRequest $request | ||||
|      * @param ObjectGroup   $objectGroup | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function update(UpdateRequest $request, ObjectGroup $objectGroup): JsonResponse | ||||
|     { | ||||
|         $data = $request->getUpdateData(); | ||||
|         $data        = $request->getUpdateData(); | ||||
|         $this->repository->update($objectGroup, $data); | ||||
|         $this->repository->resetOrder(); | ||||
|         $manager = $this->getManager(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         /** @var ObjectGroupTransformer $transformer */ | ||||
|         $transformer = app(ObjectGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         $resource = new Item($objectGroup, $transformer, 'object_groups'); | ||||
|         $resource    = new Item($objectGroup, $transformer, 'object_groups'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -37,8 +37,6 @@ class DestroyController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * Constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -58,10 +56,6 @@ class DestroyController extends Controller | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/piggy_banks/deletePiggyBank
 | ||||
|      * | ||||
|      * Delete the resource. | ||||
|      * | ||||
|      * @param PiggyBank $piggyBank | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      */ | ||||
|     public function destroy(PiggyBank $piggyBank): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -43,8 +43,6 @@ class ListController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * Constructor. | ||||
|      * | ||||
| 
 | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -63,29 +61,26 @@ class ListController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/piggy_banks/listAttachmentByPiggyBank
 | ||||
|      * | ||||
|      * @param PiggyBank $piggyBank | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function attachments(PiggyBank $piggyBank): JsonResponse | ||||
|     { | ||||
|         $manager    = $this->getManager(); | ||||
|         $pageSize   = $this->parameters->get('limit'); | ||||
|         $collection = $this->repository->getAttachments($piggyBank); | ||||
|         $manager     = $this->getManager(); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         $collection  = $this->repository->getAttachments($piggyBank); | ||||
| 
 | ||||
|         $count       = $collection->count(); | ||||
|         $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.piggy-banks.attachments', [$piggyBank->id]) . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.piggy-banks.attachments', [$piggyBank->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var AttachmentTransformer $transformer */ | ||||
|         $transformer = app(AttachmentTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource    = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
| @@ -97,30 +92,27 @@ class ListController extends Controller | ||||
|      * | ||||
|      * List single resource. | ||||
|      * | ||||
|      * @param PiggyBank $piggyBank | ||||
|      * | ||||
|      * @return JsonResponse | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function piggyBankEvents(PiggyBank $piggyBank): JsonResponse | ||||
|     { | ||||
|         // types to get, page size:
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $manager  = $this->getManager(); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         $collection = $this->repository->getEvents($piggyBank); | ||||
|         $count      = $collection->count(); | ||||
|         $events     = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $collection  = $this->repository->getEvents($piggyBank); | ||||
|         $count       = $collection->count(); | ||||
|         $events      = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator = new LengthAwarePaginator($events, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.piggy-banks.events', [$piggyBank->id]) . $this->buildParams()); | ||||
|         $paginator   = new LengthAwarePaginator($events, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator->setPath(route('api.v1.piggy-banks.events', [$piggyBank->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var PiggyBankEventTransformer $transformer */ | ||||
|         $transformer = app(PiggyBankEventTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource = new FractalCollection($events, $transformer, 'piggy_bank_events'); | ||||
|         $resource    = new FractalCollection($events, $transformer, 'piggy_bank_events'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         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