diff --git a/app/Console/Commands/Correction/FixUnevenAmount.php b/app/Console/Commands/Correction/FixUnevenAmount.php index e57b4f8ba6..9ab65c70e4 100644 --- a/app/Console/Commands/Correction/FixUnevenAmount.php +++ b/app/Console/Commands/Correction/FixUnevenAmount.php @@ -55,7 +55,10 @@ class FixUnevenAmount extends Command /** @var stdClass $entry */ foreach ($journals as $entry) { $sum = (string)$entry->the_sum; - if (!is_numeric($sum) || 0 === strlen($sum) || str_contains($sum, 'e') || str_contains($sum, ',')) { + if (!is_numeric($sum) || + 0 === strlen($sum) || // @phpstan-ignore-line + str_contains($sum, 'e') || + str_contains($sum, ',')) { $message = sprintf( 'Journal #%d has an invalid sum ("%s"). No sure what to do.', $entry->transaction_journal_id, diff --git a/app/Factory/TransactionJournalFactory.php b/app/Factory/TransactionJournalFactory.php index 5b583259d1..61c46a0260 100644 --- a/app/Factory/TransactionJournalFactory.php +++ b/app/Factory/TransactionJournalFactory.php @@ -480,8 +480,7 @@ class TransactionJournalFactory // return user's default: return app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); } - $result = ($preference ?? $currency) - ?? app('amount')->getSystemCurrency(); + $result = $preference ?? $currency; app('log')->debug(sprintf('Currency is now #%d (%s) because of account #%d (%s)', $result->id, $result->code, $account->id, $account->name)); return $result; diff --git a/app/Handlers/Observer/TransactionObserver.php b/app/Handlers/Observer/TransactionObserver.php index d1d117f1a0..8b20b95d65 100644 --- a/app/Handlers/Observer/TransactionObserver.php +++ b/app/Handlers/Observer/TransactionObserver.php @@ -30,7 +30,12 @@ use FireflyIII\Models\Transaction; */ class TransactionObserver { - public function deleting(Transaction $transaction): void + /** + * @param Transaction|null $transaction + * + * @return void + */ + public function deleting(?Transaction $transaction): void { app('log')->debug('Observe "deleting" of a transaction.'); $transaction?->transactionJournal?->delete(); diff --git a/app/Http/Controllers/Chart/ExpenseReportController.php b/app/Http/Controllers/Chart/ExpenseReportController.php index 6757e856c4..f6fb7e81ca 100644 --- a/app/Http/Controllers/Chart/ExpenseReportController.php +++ b/app/Http/Controllers/Chart/ExpenseReportController.php @@ -186,7 +186,7 @@ class ExpenseReportController extends Controller $newSet = []; foreach ($chartData as $key => $entry) { // TODO not sure, this is a bad comparison. - if (0 === !array_sum($entry['entries'])) { + if (array_sum($entry['entries']) > 0) { $newSet[$key] = $entry; } } diff --git a/app/Http/Controllers/Report/BudgetController.php b/app/Http/Controllers/Report/BudgetController.php index 715b8e1fb0..e14304d1f0 100644 --- a/app/Http/Controllers/Report/BudgetController.php +++ b/app/Http/Controllers/Report/BudgetController.php @@ -258,7 +258,7 @@ class BudgetController extends Controller // loop again to get percentages. foreach ($report as $budgetId => $data) { foreach ($data['currencies'] as $currencyId => $dataX) { - $sum = $dataX['sum'] ?? '0'; + $sum = $dataX['sum']; $total = $sums[$currencyId]['sum'] ?? '0'; $pct = '0'; if (0 !== bccomp($sum, '0') && 0 !== bccomp($total, '9')) { diff --git a/app/Http/Controllers/Transaction/ConvertController.php b/app/Http/Controllers/Transaction/ConvertController.php index ac04aede93..55a062addb 100644 --- a/app/Http/Controllers/Transaction/ConvertController.php +++ b/app/Http/Controllers/Transaction/ConvertController.php @@ -33,7 +33,6 @@ use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Services\Internal\Update\JournalUpdateService; use FireflyIII\Support\Http\Controllers\ModelInformation; use FireflyIII\Transformers\TransactionGroupTransformer; @@ -54,7 +53,6 @@ class ConvertController extends Controller use ModelInformation; private AccountRepositoryInterface $accountRepository; - private JournalRepositoryInterface $repository; /** * ConvertController constructor. @@ -68,7 +66,6 @@ class ConvertController extends Controller // some useful repositories: $this->middleware( function ($request, $next) { - $this->repository = app(JournalRepositoryInterface::class); $this->accountRepository = app(AccountRepositoryInterface::class); app('view')->share('title', (string)trans('firefly.transactions')); app('view')->share('mainTitleIcon', 'fa-exchange'); diff --git a/app/Http/Controllers/Transaction/MassController.php b/app/Http/Controllers/Transaction/MassController.php index 61af666813..60d331fe03 100644 --- a/app/Http/Controllers/Transaction/MassController.php +++ b/app/Http/Controllers/Transaction/MassController.php @@ -39,6 +39,7 @@ use FireflyIII\Services\Internal\Update\JournalUpdateService; use Illuminate\Contracts\Foundation\Application; use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; use Illuminate\View\View as IlluminateView; use InvalidArgumentException; @@ -251,7 +252,8 @@ class MassController extends Controller try { $carbon = Carbon::parse($value[$journalId]); } catch (InvalidArgumentException $e) { - $e->getMessage(); + Log::warning(sprintf('Could not parse "%s" but dont mind',$value[$journalId])); + Log::warning($e->getMessage()); return null; } diff --git a/app/Http/Controllers/Transaction/ShowController.php b/app/Http/Controllers/Transaction/ShowController.php index 870d871347..741a4041ae 100644 --- a/app/Http/Controllers/Transaction/ShowController.php +++ b/app/Http/Controllers/Transaction/ShowController.php @@ -84,7 +84,7 @@ class ShowController extends Controller */ public function show(Request $request, TransactionGroup $transactionGroup) { - /** @var TransactionJournal $first */ + /** @var TransactionJournal|null $first */ $first = $transactionGroup->transactionJournals()->first(['transaction_journals.*']); $splits = $transactionGroup->transactionJournals()->count(); diff --git a/app/Http/Middleware/InterestingMessage.php b/app/Http/Middleware/InterestingMessage.php index ba3d5553ee..60f139e566 100644 --- a/app/Http/Middleware/InterestingMessage.php +++ b/app/Http/Middleware/InterestingMessage.php @@ -109,7 +109,7 @@ class InterestingMessage $message = $request->get('message'); // send message about newly created transaction group. - /** @var TransactionGroup $group */ + /** @var TransactionGroup|null $group */ $group = auth()->user()->transactionGroups()->with(['transactionJournals', 'transactionJournals.transactionType'])->find((int)$transactionGroupId); if (null === $group) { @@ -118,7 +118,7 @@ class InterestingMessage $count = $group->transactionJournals->count(); - /** @var TransactionJournal $journal */ + /** @var TransactionJournal|null $journal */ $journal = $group->transactionJournals->first(); if (null === $journal) { return; @@ -163,7 +163,7 @@ class InterestingMessage $accountId = $request->get('account_id'); $message = $request->get('message'); - /** @var Account $account */ + /** @var Account|null $account */ $account = auth()->user()->accounts()->withTrashed()->find($accountId); if (null === $account) { @@ -203,7 +203,7 @@ class InterestingMessage $billId = $request->get('bill_id'); $message = $request->get('message'); - /** @var Bill $bill */ + /** @var Bill|null $bill */ $bill = auth()->user()->bills()->withTrashed()->find($billId); if (null === $bill) { @@ -240,7 +240,7 @@ class InterestingMessage $webhookId = $request->get('webhook_id'); $message = $request->get('message'); - /** @var Webhook $webhook */ + /** @var Webhook|null $webhook */ $webhook = auth()->user()->webhooks()->withTrashed()->find($webhookId); if (null === $webhook) { @@ -283,7 +283,7 @@ class InterestingMessage $code = $request->get('code'); $message = $request->get('message'); - /** @var TransactionCurrency $currency */ + /** @var TransactionCurrency|null $currency */ $currency = TransactionCurrency::whereCode($code)->first(); if (null === $currency) { diff --git a/app/Http/Middleware/IsDemoUser.php b/app/Http/Middleware/IsDemoUser.php index 4dc6586123..e5ff35a34e 100644 --- a/app/Http/Middleware/IsDemoUser.php +++ b/app/Http/Middleware/IsDemoUser.php @@ -43,7 +43,7 @@ class IsDemoUser */ public function handle(Request $request, Closure $next) { - /** @var User $user */ + /** @var User|null $user */ $user = $request->user(); if (null === $user) { return $next($request); diff --git a/app/Models/Account.php b/app/Models/Account.php index 7c12a111ad..40578e52d7 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -185,7 +185,7 @@ class Account extends Model */ public function getAccountNumberAttribute(): string { - /** @var AccountMeta $metaValue */ + /** @var AccountMeta|null $metaValue */ $metaValue = $this->accountMeta() ->where('name', 'account_number') ->first(); diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 78e35d6de0..4fd6421cf0 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -189,9 +189,7 @@ class Transaction extends Model public static function isJoined(Builder $query, string $table): bool { $joins = $query->getQuery()->joins; - if (null === $joins) { - return false; - } + foreach ($joins as $join) { if ($join->table === $table) { return true; diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index 767ba98982..721772a52c 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -330,9 +330,6 @@ class TransactionJournal extends Model public static function isJoined(Builder $query, string $table): bool { $joins = $query->getQuery()->joins; - if (null === $joins) { - return false; - } foreach ($joins as $join) { if ($join->table === $table) { return true; diff --git a/app/Models/UserGroup.php b/app/Models/UserGroup.php index bc7172e0c0..52abf6dfe9 100644 --- a/app/Models/UserGroup.php +++ b/app/Models/UserGroup.php @@ -108,7 +108,7 @@ class UserGroup extends Model $userGroupId = (int)$value; /** @var User $user */ $user = auth()->user(); - /** @var UserGroup $userGroup */ + /** @var UserGroup|null $userGroup */ $userGroup = UserGroup::find($userGroupId); if (null === $userGroup) { throw new NotFoundHttpException(); diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index 6ff16fff20..d8c6d4d38a 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -167,7 +167,7 @@ class AccountRepository implements AccountRepositoryInterface app('log')->debug(sprintf('Searching for account named "%s" (of user #%d) of the following type(s)', $name, $this->user->id), ['types' => $types]); $query->where('accounts.name', $name); - /** @var Account $account */ + /** @var Account|null $account */ $account = $query->first(['accounts.*']); if (null === $account) { app('log')->debug(sprintf('There is no account with name "%s" of types', $name), $types); @@ -434,11 +434,12 @@ class AccountRepository implements AccountRepositoryInterface /** @var AccountType $type */ $type = AccountType::where('type', AccountType::RECONCILIATION)->first(); + + /** @var Account|null $current */ $current = $this->user->accounts()->where('account_type_id', $type->id) ->where('name', $name) ->first(); - /** @var Account $current */ if (null !== $current) { return $current; } diff --git a/app/Repositories/Bill/BillRepository.php b/app/Repositories/Bill/BillRepository.php index 250734caf5..786fa6cb58 100644 --- a/app/Repositories/Bill/BillRepository.php +++ b/app/Repositories/Bill/BillRepository.php @@ -284,13 +284,10 @@ class BillRepository implements BillRepositoryInterface */ public function getNoteText(Bill $bill): string { - /** @var Note $note */ + /** @var Note|null $note */ $note = $bill->notes()->first(); - if (null !== $note) { - return (string)$note->text; - } + return (string)$note?->text; - return ''; } /** @@ -452,7 +449,7 @@ class BillRepository implements BillRepositoryInterface /** @var TransactionJournal $journal */ foreach ($journals as $journal) { - /** @var Transaction $transaction */ + /** @var Transaction|null $transaction */ $transaction = $journal->transactions()->where('amount', '<', 0)->first(); if (null === $transaction) { continue; diff --git a/app/Repositories/Budget/BudgetLimitRepository.php b/app/Repositories/Budget/BudgetLimitRepository.php index 92ba3fae56..005e817fdc 100644 --- a/app/Repositories/Budget/BudgetLimitRepository.php +++ b/app/Repositories/Budget/BudgetLimitRepository.php @@ -401,7 +401,7 @@ class BudgetLimitRepository implements BudgetLimitRepositoryInterface app('log')->debug(sprintf('Found %d budget limits.', $limits)); // there might be a budget limit for these dates: - /** @var BudgetLimit $limit */ + /** @var BudgetLimit|null $limit */ $limit = $budget->budgetlimits() ->where('budget_limits.start_date', $start->format('Y-m-d 00:00:00')) ->where('budget_limits.end_date', $end->format('Y-m-d 00:00:00')) diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php index 6015a872ee..e02219e249 100644 --- a/app/Repositories/Currency/CurrencyRepository.php +++ b/app/Repositories/Currency/CurrencyRepository.php @@ -81,7 +81,7 @@ class CurrencyRepository implements CurrencyRepositoryInterface return $rate; } - /** @var CurrencyExchangeRate $rate */ + /** @var CurrencyExchangeRate|null $rate */ $rate = $this->user->currencyExchangeRates() ->where('from_currency_id', $fromCurrency->id) ->where('to_currency_id', $toCurrency->id) diff --git a/app/Repositories/Journal/JournalRepository.php b/app/Repositories/Journal/JournalRepository.php index b6febf258a..7cd0667ea5 100644 --- a/app/Repositories/Journal/JournalRepository.php +++ b/app/Repositories/Journal/JournalRepository.php @@ -104,7 +104,7 @@ class JournalRepository implements JournalRepositoryInterface */ public function getDestinationAccount(TransactionJournal $journal): Account { - /** @var Transaction $transaction */ + /** @var Transaction|null $transaction */ $transaction = $journal->transactions()->with('account')->where('amount', '>', 0)->first(); if (null === $transaction) { throw new FireflyException(sprintf('Your administration is broken. Transaction journal #%d has no destination transaction.', $journal->id)); @@ -142,7 +142,7 @@ class JournalRepository implements JournalRepositoryInterface */ public function getLast(): ?TransactionJournal { - /** @var TransactionJournal $entry */ + /** @var TransactionJournal|null $entry */ $entry = $this->user->transactionJournals()->orderBy('date', 'DESC')->first(['transaction_journals.*']); $result = null; if (null !== $entry) { @@ -159,13 +159,9 @@ class JournalRepository implements JournalRepositoryInterface */ public function getLinkNoteText(TransactionJournalLink $link): string { - /** @var Note $note */ + /** @var Note|null $note */ $note = $link->notes()->first(); - if (null !== $note) { - return $note->text ?? ''; - } - - return ''; + return (string)$note?->text; } /** diff --git a/app/Validation/Administration/ValidatesAdministrationAccess.php b/app/Validation/Administration/ValidatesAdministrationAccess.php deleted file mode 100644 index a486b898a8..0000000000 --- a/app/Validation/Administration/ValidatesAdministrationAccess.php +++ /dev/null @@ -1,106 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace FireflyIII\Validation\Administration; - -use FireflyIII\Enums\UserRoleEnum; -use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Repositories\User\UserRepositoryInterface; -use FireflyIII\User; -use Illuminate\Auth\AuthenticationException; -use Illuminate\Validation\Validator; - -/** - * @deprecated - * Trait ValidatesAdministrationAccess - */ -trait ValidatesAdministrationAccess -{ - /** - * @param Validator $validator - * @param array $allowedRoles - * - * @return void - * @throws AuthenticationException - * @throws FireflyException - * @deprecated - */ - protected function validateAdministration(Validator $validator, array $allowedRoles): void - { - throw new FireflyException('deprecated method, must be done through user.'); - app('log')->debug('Now in validateAdministration()'); - if (!auth()->check()) { - app('log')->error('User is not authenticated.'); - throw new AuthenticationException('No access to validateAdministration() method.'); - } - /** @var User $user */ - $user = auth()->user(); - // get data from request: - $data = $validator->getData(); - // check if user is part of this administration - $administrationId = (int)($data['administration_id'] ?? $user->getAdministrationId()); - // safety catch: - if (0 === $administrationId) { - app('log')->error('validateAdministration ran into empty administration ID.'); - throw new AuthenticationException('Cannot validate administration.'); - } - // grab the group: - $repository = app(UserRepositoryInterface::class); - - // collect the user's roles in this group: - $array = $repository->getRolesInGroup($user, $administrationId); - if (0 === count($array)) { - app('log')->error(sprintf('User #%d ("%s") has no membership in group #%d.', $user->id, $user->email, $administrationId)); - $validator->errors()->add('administration', (string)trans('validation.no_access_user_group')); - return; - } - if (in_array(UserRoleEnum::OWNER->value, $array, true)) { - app('log')->debug('User is owner of this administration.'); - return; - } - if (in_array(UserRoleEnum::OWNER->value, $array, true)) { - app('log')->debug('User has full access to this administration.'); - return; - } - $access = true; - foreach ($allowedRoles as $allowedRole) { - if (!in_array($allowedRole, $array, true)) { - $access = false; - } - } - if (false === $access) { - app('log')->error( - sprintf( - 'User #%d has memberships [%s] to group #%d but needs [%s].', - $user->id, - join(', ', $array), - $administrationId, - join(', ', $allowedRoles) - ) - ); - $validator->errors()->add('administration', (string)trans('validation.no_access_user_group')); - } - } -}