diff --git a/app/Api/V1/Controllers/Chart/AccountController.php b/app/Api/V1/Controllers/Chart/AccountController.php index dcd85072b9..f9cbf3bfa7 100644 --- a/app/Api/V1/Controllers/Chart/AccountController.php +++ b/app/Api/V1/Controllers/Chart/AccountController.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\Chart; +use FireflyIII\Exceptions\ValidationException; use FireflyIII\Models\TransactionCurrency; use Carbon\Carbon; use FireflyIII\Api\V1\Controllers\Controller; @@ -35,6 +36,7 @@ use FireflyIII\Models\Account; use FireflyIII\Models\Preference; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Support\Chart\ChartData; +use FireflyIII\Support\Facades\Preferences; use FireflyIII\Support\Facades\Steam; use FireflyIII\Support\Http\Api\ApiSupport; use FireflyIII\Support\Http\Api\CollectsAccountsFromFilter; @@ -139,7 +141,9 @@ class AccountController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/charts/getChartAccountOverview * - * @throws FireflyException + * @param DateRequest $request + * @return JsonResponse + * @throws ValidationException */ public function overview(DateRequest $request): JsonResponse { @@ -160,7 +164,7 @@ class AccountController extends Controller $defaultSet = $this->repository->getAccountsByType([AccountTypeEnum::ASSET->value])->pluck('id')->toArray(); /** @var Preference $frontpage */ - $frontpage = app('preferences')->get('frontpageAccounts', $defaultSet); + Preferences::get('frontpageAccounts', $defaultSet); if (!(is_array($frontpage->data) && count($frontpage->data) > 0)) { $frontpage->data = $defaultSet; diff --git a/app/Api/V1/Controllers/Chart/BudgetController.php b/app/Api/V1/Controllers/Chart/BudgetController.php index 58a187d598..44b6c15d07 100644 --- a/app/Api/V1/Controllers/Chart/BudgetController.php +++ b/app/Api/V1/Controllers/Chart/BudgetController.php @@ -233,16 +233,13 @@ class BudgetController extends Controller $end->endOfDay(); $spent = $this->opsRepository->listExpenses($limit->start_date, $end, null, new Collection([$budget])); $limitCurrencyId = $limit->transaction_currency_id; - $filtered = []; /** @var array $entry */ - foreach ($spent as $currencyId => $entry) { - // only spent the entry where the entry's currency matches the budget limit's currency - // so $filtered will only have 1 or 0 entries - if ($entry['currency_id'] === $limitCurrencyId) { - $filtered[$currencyId] = $entry; - } - } + // only spent the entry where the entry's currency matches the budget limit's currency + // so $filtered will only have 1 or 0 entries + $filtered = array_filter($spent, function ($entry) use ($limitCurrencyId) { + return $entry['currency_id'] === $limitCurrencyId; + }); $result = $this->processExpenses($budget->id, $filtered, $limit->start_date, $end); if (1 === count($result)) { $compare = bccomp($limit->amount, (string) app('steam')->positive($result[$limitCurrencyId]['spent'])); diff --git a/app/Api/V1/Controllers/Controller.php b/app/Api/V1/Controllers/Controller.php index dc5063afc4..13c06b5972 100644 --- a/app/Api/V1/Controllers/Controller.php +++ b/app/Api/V1/Controllers/Controller.php @@ -127,7 +127,6 @@ abstract class Controller extends BaseController Log::error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $field)); Log::error($e->getMessage()); Log::error($e->getTraceAsString()); - $value = null; } $obj = null; if (null !== $date) { diff --git a/app/Api/V1/Controllers/Data/DestroyController.php b/app/Api/V1/Controllers/Data/DestroyController.php index 198a804a1b..b2ed17a568 100644 --- a/app/Api/V1/Controllers/Data/DestroyController.php +++ b/app/Api/V1/Controllers/Data/DestroyController.php @@ -64,7 +64,7 @@ class DestroyController extends Controller public function destroy(DestroyRequest $request): JsonResponse { $objects = $request->getObjects(); - $this->unused = $request->boolean('unused', false); + $this->unused = $request->boolean('unused'); $allExceptAssets = [AccountTypeEnum::BENEFICIARY->value, AccountTypeEnum::CASH->value, AccountTypeEnum::CREDITCARD->value, AccountTypeEnum::DEFAULT->value, AccountTypeEnum::EXPENSE->value, AccountTypeEnum::IMPORT->value, AccountTypeEnum::INITIAL_BALANCE->value, AccountTypeEnum::LIABILITY_CREDIT->value, AccountTypeEnum::RECONCILIATION->value, AccountTypeEnum::REVENUE->value]; $all = [AccountTypeEnum::ASSET->value, AccountTypeEnum::BENEFICIARY->value, AccountTypeEnum::CASH->value, AccountTypeEnum::CREDITCARD->value, AccountTypeEnum::DEBT->value, AccountTypeEnum::DEFAULT->value, AccountTypeEnum::EXPENSE->value, AccountTypeEnum::IMPORT->value, AccountTypeEnum::INITIAL_BALANCE->value, AccountTypeEnum::LIABILITY_CREDIT->value, AccountTypeEnum::LOAN->value, AccountTypeEnum::MORTGAGE->value, AccountTypeEnum::RECONCILIATION->value]; diff --git a/app/Api/V1/Controllers/Data/Export/ExportController.php b/app/Api/V1/Controllers/Data/Export/ExportController.php index ac316e9930..0f322d3f8c 100644 --- a/app/Api/V1/Controllers/Data/Export/ExportController.php +++ b/app/Api/V1/Controllers/Data/Export/ExportController.php @@ -30,6 +30,7 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Support\Export\ExportDataGenerator; use Illuminate\Http\Response as LaravelResponse; +use Safe\Exceptions\DatetimeException; use function Safe\date; /** @@ -71,7 +72,10 @@ class ExportController extends Controller } /** + * @param string $key + * @return LaravelResponse * @throws FireflyException + * @throws DatetimeException */ private function returnExport(string $key): LaravelResponse { diff --git a/app/Api/V1/Controllers/Models/BudgetLimit/StoreController.php b/app/Api/V1/Controllers/Models/BudgetLimit/StoreController.php index 5da7d3050c..6f899b19ce 100644 --- a/app/Api/V1/Controllers/Models/BudgetLimit/StoreController.php +++ b/app/Api/V1/Controllers/Models/BudgetLimit/StoreController.php @@ -69,7 +69,6 @@ class StoreController extends Controller $data = $request->getAll(); $data['start_date'] = $data['start']; $data['end_date'] = $data['end']; - $data['notes'] = $data['notes']; $data['budget_id'] = $budget->id; $budgetLimit = $this->blRepository->store($data); diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php index e22212bd46..d53f05aff3 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php @@ -32,6 +32,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; +use Illuminate\Validation\ValidationException; /** * Class DestroyController @@ -64,7 +65,10 @@ class DestroyController extends Controller * * Remove the specified resource from storage. * + * @param TransactionCurrency $currency + * @return JsonResponse * @throws FireflyException + * @throws ValidationException */ public function destroy(TransactionCurrency $currency): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php index 20362f6e6d..3e46b7a3cc 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php @@ -250,10 +250,8 @@ class ListController extends Controller $collection = $unfiltered->filter( static function (Recurrence $recurrence) use ($currency) { // @phpstan-ignore-line /** @var RecurrenceTransaction $transaction */ - foreach ($recurrence->recurrenceTransactions as $transaction) { - if ($transaction->transaction_currency_id === $currency->id || $transaction->foreign_currency_id === $currency->id) { - return $recurrence; - } + if (array_any($recurrence->recurrenceTransactions, fn($transaction) => $transaction->transaction_currency_id === $currency->id || $transaction->foreign_currency_id === $currency->id)) { + return $recurrence; } return null; @@ -297,10 +295,8 @@ class ListController extends Controller $collection = $unfiltered->filter( static function (Rule $rule) use ($currency) { // @phpstan-ignore-line /** @var RuleTrigger $trigger */ - foreach ($rule->ruleTriggers as $trigger) { - if ('currency_is' === $trigger->trigger_type && $currency->name === $trigger->trigger_value) { - return $rule; - } + if (array_any($rule->ruleTriggers, fn($trigger) => 'currency_is' === $trigger->trigger_type && $currency->name === $trigger->trigger_value)) { + return $rule; } return null; diff --git a/app/Api/V1/Controllers/Models/TransactionLinkType/StoreController.php b/app/Api/V1/Controllers/Models/TransactionLinkType/StoreController.php index e9aef4aa2a..7c0692ea28 100644 --- a/app/Api/V1/Controllers/Models/TransactionLinkType/StoreController.php +++ b/app/Api/V1/Controllers/Models/TransactionLinkType/StoreController.php @@ -34,6 +34,7 @@ use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\LinkTypeTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; +use Illuminate\Validation\ValidationException; use League\Fractal\Resource\Item; /** @@ -71,7 +72,9 @@ class StoreController extends Controller * * Store new object. * - * @throws FireflyException + * @param StoreRequest $request + * @return JsonResponse + * @throws ValidationException */ public function store(StoreRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/TransactionLinkType/UpdateController.php b/app/Api/V1/Controllers/Models/TransactionLinkType/UpdateController.php index 9d392ab805..c6426e441d 100644 --- a/app/Api/V1/Controllers/Models/TransactionLinkType/UpdateController.php +++ b/app/Api/V1/Controllers/Models/TransactionLinkType/UpdateController.php @@ -35,6 +35,7 @@ use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\LinkTypeTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; +use Illuminate\Validation\ValidationException; use League\Fractal\Resource\Item; /** @@ -72,7 +73,11 @@ class UpdateController extends Controller * * Update object. * + * @param UpdateRequest $request + * @param LinkType $linkType + * @return JsonResponse * @throws FireflyException + * @throws ValidationException */ public function update(UpdateRequest $request, LinkType $linkType): JsonResponse { diff --git a/app/Api/V1/Controllers/Summary/BasicController.php b/app/Api/V1/Controllers/Summary/BasicController.php index 1878812a27..02b7bc0405 100644 --- a/app/Api/V1/Controllers/Summary/BasicController.php +++ b/app/Api/V1/Controllers/Summary/BasicController.php @@ -130,8 +130,6 @@ class BasicController extends Controller $convertToNative = Amount::convertToNative(); $default = Amount::getNativeCurrency(); // prep some arrays: - $incomes = []; - $expenses = []; $sums = []; $return = []; $currencies = [ diff --git a/app/Api/V1/Controllers/System/ConfigurationController.php b/app/Api/V1/Controllers/System/ConfigurationController.php index fcb6351785..917291cc7b 100644 --- a/app/Api/V1/Controllers/System/ConfigurationController.php +++ b/app/Api/V1/Controllers/System/ConfigurationController.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\System; +use FireflyIII\Support\Facades\FireflyConfig; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Validator; use FireflyIII\Api\V1\Controllers\Controller; @@ -32,6 +33,7 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Support\Binder\EitherConfigKey; use Illuminate\Http\JsonResponse; +use Illuminate\Validation\ValidationException; /** * Class ConfigurationController @@ -93,13 +95,14 @@ class ConfigurationController extends Controller /** * Get all config values. + * @throws FireflyException */ private function getDynamicConfiguration(): array { - $isDemoSite = app('fireflyconfig')->get('is_demo_site'); - $updateCheck = app('fireflyconfig')->get('permission_update_check'); - $lastCheck = app('fireflyconfig')->get('last_update_check'); - $singleUser = app('fireflyconfig')->get('single_user_mode'); + $isDemoSite = FireflyConfig::get('is_demo_site'); + $updateCheck = FireflyConfig::get('permission_update_check'); + $lastCheck = FireflyConfig::get('last_update_check'); + $singleUser = FireflyConfig::get('single_user_mode'); return [ 'is_demo_site' => $isDemoSite?->data, @@ -153,7 +156,11 @@ class ConfigurationController extends Controller * * Update the configuration. * + * @param UpdateRequest $request + * @param string $name + * @return JsonResponse * @throws FireflyException + * @throws ValidationException */ public function update(UpdateRequest $request, string $name): JsonResponse { @@ -165,7 +172,7 @@ class ConfigurationController extends Controller $data = $request->getAll(); $shortName = str_replace('configuration.', '', $name); - app('fireflyconfig')->set($shortName, $data['value']); + FireflyConfig::set($shortName, $data['value']); // get updated config: $newConfig = $this->getDynamicConfiguration(); diff --git a/app/Api/V1/Controllers/Webhook/SubmitController.php b/app/Api/V1/Controllers/Webhook/SubmitController.php index bdec19c8c5..034bea04b6 100644 --- a/app/Api/V1/Controllers/Webhook/SubmitController.php +++ b/app/Api/V1/Controllers/Webhook/SubmitController.php @@ -76,6 +76,6 @@ class SubmitController extends Controller SendWebhookMessage::dispatch($message)->afterResponse(); } - return response()->json([]); + return response()->json(); } } diff --git a/app/Api/V1/Requests/Data/Bulk/TransactionRequest.php b/app/Api/V1/Requests/Data/Bulk/TransactionRequest.php index d8b9a03baa..b02ee21149 100644 --- a/app/Api/V1/Requests/Data/Bulk/TransactionRequest.php +++ b/app/Api/V1/Requests/Data/Bulk/TransactionRequest.php @@ -54,7 +54,7 @@ class TransactionRequest extends FormRequest 'query' => json_decode($this->get('query'), true, 8, JSON_THROW_ON_ERROR), ]; } catch (JsonException $e) { - // dont really care. the validation should catch invalid json. + // don't really care. the validation should catch invalid json. Log::error($e->getMessage()); } diff --git a/app/Api/V1/Requests/Models/Bill/StoreRequest.php b/app/Api/V1/Requests/Models/Bill/StoreRequest.php index 0a639d84e3..727eb9afed 100644 --- a/app/Api/V1/Requests/Models/Bill/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Bill/StoreRequest.php @@ -128,7 +128,6 @@ class StoreRequest extends FormRequest $failed = $validator->fails(); } catch (TypeError $e) { Log::error($e->getMessage()); - $failed = false; } if ($failed) { Log::channel('audit')->error(sprintf('Validation errors in %s', self::class), $validator->errors()->toArray()); diff --git a/app/Api/V1/Requests/Models/Recurrence/StoreRequest.php b/app/Api/V1/Requests/Models/Recurrence/StoreRequest.php index 7afa2243fa..b9f736f74f 100644 --- a/app/Api/V1/Requests/Models/Recurrence/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Recurrence/StoreRequest.php @@ -76,7 +76,7 @@ class StoreRequest extends FormRequest /** * Returns the transaction data as it is found in the submitted data. It's a complex method according to code - * standards but it just has a lot of ??-statements because of the fields that may or may not exist. + * standards, but it just has a lot of ??-statements because of the fields that may or may not exist. */ private function getTransactionData(): array { diff --git a/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php b/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php index e387e0b4cc..bd8a26f1c2 100644 --- a/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php @@ -122,7 +122,7 @@ class UpdateRequest extends FormRequest /** * Returns the transaction data as it is found in the submitted data. It's a complex method according to code - * standards but it just has a lot of ??-statements because of the fields that may or may not exist. + * standards, but it just has a lot of ??-statements because of the fields that may or may not exist. */ private function getTransactionData(): array { diff --git a/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php b/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php index 1e1ba30fca..1aa8af303d 100644 --- a/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php @@ -183,7 +183,7 @@ class UpdateRequest extends FormRequest foreach ($this->dateFields as $fieldName) { app('log')->debug(sprintf('Now at date field %s', $fieldName)); if (array_key_exists($fieldName, $transaction)) { - app('log')->debug(sprintf('New value: "%s"', (string) $transaction[$fieldName])); + Log::debug(sprintf('New value: "%s"', $transaction[$fieldName])); $current[$fieldName] = $this->dateFromValue((string) $transaction[$fieldName]); } } diff --git a/app/Api/V1/Requests/Models/UserGroup/UpdateRequest.php b/app/Api/V1/Requests/Models/UserGroup/UpdateRequest.php index fd238dcbf2..77fb8b1a36 100644 --- a/app/Api/V1/Requests/Models/UserGroup/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/UserGroup/UpdateRequest.php @@ -53,9 +53,6 @@ class UpdateRequest extends FormRequest */ public function rules(): array { - /** @var UserGroup $userGroup */ - $userGroup = $this->route()->parameter('userGroup'); - return [ 'title' => ['required', 'min:1', 'max:255'], 'native_currency_id' => 'exists:transaction_currencies,id', diff --git a/app/Api/V2/Controllers/Controller.php b/app/Api/V2/Controllers/Controller.php index 0a2afcfac5..7d6698650d 100644 --- a/app/Api/V2/Controllers/Controller.php +++ b/app/Api/V2/Controllers/Controller.php @@ -82,7 +82,7 @@ class Controller extends BaseController try { $page = (int) request()->get('page'); - } catch (ContainerExceptionInterface|NotFoundExceptionInterface $e) { + } catch (ContainerExceptionInterface) { $page = 1; } diff --git a/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php b/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php index 5272aa7a4d..b87ba89314 100644 --- a/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php +++ b/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php @@ -53,7 +53,7 @@ class ListController extends Controller */ public function index(): JsonResponse { - return response()->json([]); + return response()->json(); // throw new FireflyException('Needs refactoring, move to IndexController.'); // $pageSize = $this->parameters->get('limit'); // $dates = $request->getAll(); diff --git a/app/Api/V2/Controllers/Model/Transaction/UpdateController.php b/app/Api/V2/Controllers/Model/Transaction/UpdateController.php index 7609c21020..35ddf870e7 100644 --- a/app/Api/V2/Controllers/Model/Transaction/UpdateController.php +++ b/app/Api/V2/Controllers/Model/Transaction/UpdateController.php @@ -69,9 +69,8 @@ class UpdateController extends Controller $transactionGroup = $this->groupRepository->update($transactionGroup, $data); $applyRules = $data['apply_rules'] ?? true; $fireWebhooks = $data['fire_webhooks'] ?? true; - $runRecalculations = true; - event(new UpdatedTransactionGroup($transactionGroup, $applyRules, $fireWebhooks, $runRecalculations)); + event(new UpdatedTransactionGroup($transactionGroup, $applyRules, $fireWebhooks, true)); app('preferences')->mark(); /** @var User $admin */ diff --git a/app/Api/V2/Controllers/Model/TransactionCurrency/IndexController.php b/app/Api/V2/Controllers/Model/TransactionCurrency/IndexController.php index aad0662430..babc2901d4 100644 --- a/app/Api/V2/Controllers/Model/TransactionCurrency/IndexController.php +++ b/app/Api/V2/Controllers/Model/TransactionCurrency/IndexController.php @@ -31,6 +31,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Transformers\CurrencyTransformer; use Illuminate\Http\JsonResponse; use Illuminate\Pagination\LengthAwarePaginator; +use Illuminate\Support\Collection; class IndexController extends Controller { @@ -56,6 +57,7 @@ class IndexController extends Controller public function index(IndexRequest $request): JsonResponse { $settings = $request->getAll(); + $currencies = new Collection(); if (true === $settings['enabled']) { $currencies = $this->repository->get(); } diff --git a/app/Api/V2/Request/Model/Transaction/UpdateRequest.php b/app/Api/V2/Request/Model/Transaction/UpdateRequest.php index 2511d52e26..ea4727a1bc 100644 --- a/app/Api/V2/Request/Model/Transaction/UpdateRequest.php +++ b/app/Api/V2/Request/Model/Transaction/UpdateRequest.php @@ -68,7 +68,7 @@ class UpdateRequest extends Request #[Override] public function getAll(): array { - app('log')->debug(sprintf('Now in %s', __METHOD__)); + Log::debug(sprintf('Now in %s', __METHOD__)); $this->integerFields = ['order', 'currency_id', 'foreign_currency_id', 'transaction_journal_id', 'source_id', 'destination_id', 'budget_id', 'category_id', 'bill_id', 'recurrence_id']; $this->dateFields = ['date', 'interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date']; $this->textareaFields = ['notes']; @@ -101,7 +101,7 @@ class UpdateRequest extends Request */ private function getTransactionData(): array { - app('log')->debug(sprintf('Now in %s', __METHOD__)); + Log::debug(sprintf('Now in %s', __METHOD__)); $return = []; /** @var null|array $transactions */ @@ -185,9 +185,9 @@ class UpdateRequest extends Request private function getDateData(array $current, array $transaction): array { foreach ($this->dateFields as $fieldName) { - app('log')->debug(sprintf('Now at date field %s', $fieldName)); + Log::debug(sprintf('Now at date field %s', $fieldName)); if (array_key_exists($fieldName, $transaction)) { - app('log')->debug(sprintf('New value: "%s"', (string) $transaction[$fieldName])); + Log::debug(sprintf('New value: "%s"', $transaction[$fieldName])); $current[$fieldName] = $this->dateFromValue((string) $transaction[$fieldName]); } } @@ -252,7 +252,7 @@ class UpdateRequest extends Request #[Override] public function rules(): array { - app('log')->debug(sprintf('Now in %s', __METHOD__)); + Log::debug(sprintf('Now in %s', __METHOD__)); $validProtocols = config('firefly.valid_url_protocols'); return [ @@ -336,7 +336,7 @@ class UpdateRequest extends Request #[Override] public function withValidator(Validator $validator): void { - app('log')->debug('Now in withValidator'); + Log::debug('Now in withValidator'); /** @var TransactionGroup $transactionGroup */ $transactionGroup = $this->route()->parameter('userGroupTransaction');