From 5665f127aab4f73918d23fa7944a98884016b1f8 Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 9 Jul 2018 19:24:08 +0200 Subject: [PATCH] Improve code quality. --- .../Account/ReconcileController.php | 4 ++ app/Http/Controllers/AccountController.php | 3 ++ .../Admin/ConfigurationController.php | 3 +- app/Http/Controllers/Admin/HomeController.php | 5 +- .../Auth/ForgotPasswordController.php | 2 +- app/Http/Controllers/Auth/LoginController.php | 11 ++-- .../Controllers/Auth/RegisterController.php | 1 + .../Auth/ResetPasswordController.php | 1 + .../Controllers/Auth/TwoFactorController.php | 2 + app/Http/Controllers/BillController.php | 3 +- app/Http/Controllers/BudgetController.php | 8 ++- app/Http/Controllers/CategoryController.php | 5 ++ .../Controllers/Chart/AccountController.php | 4 ++ .../Controllers/Chart/BudgetController.php | 20 +++++--- .../Chart/BudgetReportController.php | 1 + .../Chart/CategoryReportController.php | 1 + .../Chart/ExpenseReportController.php | 1 + .../Controllers/Chart/TagReportController.php | 1 + app/Http/Controllers/CurrencyController.php | 50 +++++++++++++------ app/Http/Controllers/HomeController.php | 6 ++- .../Controllers/Import/IndexController.php | 9 ++-- .../Import/PrerequisitesController.php | 11 ++-- app/Http/Controllers/JavascriptController.php | 15 ++++-- .../Controllers/Json/ExchangeController.php | 5 +- .../Controllers/Popup/ReportController.php | 23 ++++++++- .../Controllers/PreferencesController.php | 1 + app/Http/Controllers/ProfileController.php | 23 ++++++--- app/Http/Controllers/ReportController.php | 27 +++++----- app/Http/Controllers/RuleController.php | 21 +++++--- app/Http/Controllers/RuleGroupController.php | 11 +++- app/Http/Controllers/TagController.php | 3 ++ .../Transaction/LinkController.php | 9 +++- .../Transaction/MassController.php | 11 ++-- .../Transaction/SplitController.php | 1 + .../Controllers/TransactionController.php | 9 ++-- app/Http/Middleware/Authenticate.php | 6 ++- app/Http/Middleware/AuthenticateTwoFactor.php | 3 ++ app/Http/Middleware/Binder.php | 2 +- app/Http/Middleware/IsDemoUser.php | 1 - app/Http/Middleware/Range.php | 1 + app/Http/Middleware/Sandstorm.php | 2 + app/Http/Requests/ConfigurationRequest.php | 2 +- app/Http/Requests/LinkTypeFormRequest.php | 2 +- .../JobConfiguration/FakeJobConfiguration.php | 4 +- app/Models/Account.php | 6 +++ app/Models/Attachment.php | 1 + app/Models/BudgetLimit.php | 4 +- app/Models/Category.php | 7 +-- app/Models/ExportJob.php | 1 + app/Models/PiggyBankEvent.php | 1 + app/Models/Preference.php | 2 + app/Models/TransactionCurrency.php | 8 +++ app/Models/TransactionJournal.php | 6 +++ app/User.php | 7 +-- resources/lang/en_US/firefly.php | 1 + 55 files changed, 278 insertions(+), 100 deletions(-) diff --git a/app/Http/Controllers/Account/ReconcileController.php b/app/Http/Controllers/Account/ReconcileController.php index 1eea4ae38a..0cc4997679 100644 --- a/app/Http/Controllers/Account/ReconcileController.php +++ b/app/Http/Controllers/Account/ReconcileController.php @@ -231,6 +231,7 @@ class ReconcileController extends Controller * @param TransactionJournal $journal * * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View + * @throws FireflyException */ public function show(TransactionJournal $journal) { @@ -242,6 +243,9 @@ class ReconcileController extends Controller // get main transaction: $transaction = $this->repository->getAssetTransaction($journal); + if(null === $transaction) { + throw new FireflyException('The transaction data is incomplete. This is probably a bug. Apologies.'); + } $account = $transaction->account; return view('accounts.reconcile.show', compact('journal', 'subTitle', 'transaction', 'account')); diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index bbf7a1429b..554575f06a 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -294,6 +294,7 @@ class AccountController extends Controller $subTitle = trans('firefly.journals_in_period_for_account', ['name' => $account->name, 'start' => $fStart, 'end' => $fEnd]); $chartUri = route('chart.account.period', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')]); $periods = $this->getPeriodOverview($account, $end); + /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); $collector->setAccounts(new Collection([$account]))->setLimit($pageSize)->setPage($page); $collector->setRange($start, $end); @@ -337,6 +338,7 @@ class AccountController extends Controller } $subTitle = trans('firefly.all_journals_for_account', ['name' => $account->name]); $periods = new Collection; + /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); $collector->setAccounts(new Collection([$account]))->setLimit($pageSize)->setPage($page); $transactions = $collector->getPaginatedJournals(); @@ -475,6 +477,7 @@ class AccountController extends Controller $spent = (string)$collector->getJournals()->sum('transaction_amount'); $dateName = app('navigation')->periodShow($currentDate['start'], $currentDate['period']); + /** @noinspection PhpUndefinedMethodInspection */ $entries->push( [ 'name' => $dateName, diff --git a/app/Http/Controllers/Admin/ConfigurationController.php b/app/Http/Controllers/Admin/ConfigurationController.php index ac2062c221..ed3097c9b8 100644 --- a/app/Http/Controllers/Admin/ConfigurationController.php +++ b/app/Http/Controllers/Admin/ConfigurationController.php @@ -28,7 +28,6 @@ use FireflyIII\Http\Middleware\IsDemoUser; use FireflyIII\Http\Middleware\IsSandStormUser; use FireflyIII\Http\Requests\ConfigurationRequest; use FireflyIII\Support\Facades\FireflyConfig; -use Redirect; /** * Class ConfigurationController. @@ -92,6 +91,6 @@ class ConfigurationController extends Controller session()->flash('success', (string)trans('firefly.configuration_updated')); app('preferences')->mark(); - return Redirect::route('admin.configuration.index'); + return redirect()->route('admin.configuration.index'); } } diff --git a/app/Http/Controllers/Admin/HomeController.php b/app/Http/Controllers/Admin/HomeController.php index b53ac0b274..668ce53214 100644 --- a/app/Http/Controllers/Admin/HomeController.php +++ b/app/Http/Controllers/Admin/HomeController.php @@ -26,6 +26,7 @@ use FireflyIII\Events\AdminRequestedTestMessage; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Middleware\IsDemoUser; use FireflyIII\Http\Middleware\IsSandStormUser; +use FireflyIII\User; use Illuminate\Http\Request; use Log; @@ -63,9 +64,11 @@ class HomeController extends Controller */ public function testMessage(Request $request) { + /** @var User $user */ + $user = auth()->user(); $ipAddress = $request->ip(); Log::debug(sprintf('Now in testMessage() controller. IP is %s', $ipAddress)); - event(new AdminRequestedTestMessage(auth()->user(), $ipAddress)); + event(new AdminRequestedTestMessage($user, $ipAddress)); session()->flash('info', (string)trans('firefly.send_test_triggered')); return redirect(route('admin.index')); diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php index 95a99b6b0e..d5b28d405f 100644 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -85,7 +85,7 @@ class ForgotPasswordController extends Controller $request->only('email') ); - if ($response == Password::RESET_LINK_SENT) { + if ($response === Password::RESET_LINK_SENT) { return back()->with('status', trans($response)); } diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index f7015656ed..2fe7a26b1d 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -60,12 +60,9 @@ class LoginController extends Controller } /** - * Handle a login request to the application. - * * @param Request $request * - * @return \Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response - * + * @return \Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response|void * @throws \Illuminate\Validation\ValidationException */ public function login(Request $request) @@ -78,6 +75,8 @@ class LoginController extends Controller if ($this->hasTooManyLoginAttempts($request)) { $this->fireLockoutEvent($request); + /** @noinspection PhpInconsistentReturnPointsInspection */ + /** @noinspection PhpVoidFunctionResultUsedInspection */ return $this->sendLockoutResponse($request); } @@ -85,6 +84,8 @@ class LoginController extends Controller // user is logged in. Save in session if the user requested session to be remembered: $request->session()->put('remember_login', $request->filled('remember')); + /** @noinspection PhpInconsistentReturnPointsInspection */ + /** @noinspection PhpVoidFunctionResultUsedInspection */ return $this->sendLoginResponse($request); } @@ -93,6 +94,8 @@ class LoginController extends Controller // user surpasses their maximum number of attempts they will get locked out. $this->incrementLoginAttempts($request); + /** @noinspection PhpInconsistentReturnPointsInspection */ + /** @noinspection PhpVoidFunctionResultUsedInspection */ return $this->sendFailedLoginResponse($request); } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 9b274dfe7f..f7f0d83a00 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -77,6 +77,7 @@ class RegisterController extends Controller return view('error', compact('message')); } + /** @noinspection PhpUndefinedMethodInspection */ $this->validator($request->all())->validate(); event(new Registered($user = $this->create($request->all()))); diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index a403866e65..2f43ad6461 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -77,6 +77,7 @@ class ResetPasswordController extends Controller $allowRegistration = false; } + /** @noinspection PhpUndefinedFieldInspection */ return view('auth.passwords.reset')->with( ['token' => $token, 'email' => $request->email, 'allowRegistration' => $allowRegistration] ); diff --git a/app/Http/Controllers/Auth/TwoFactorController.php b/app/Http/Controllers/Auth/TwoFactorController.php index a666e5a507..3bc779fde6 100644 --- a/app/Http/Controllers/Auth/TwoFactorController.php +++ b/app/Http/Controllers/Auth/TwoFactorController.php @@ -25,6 +25,7 @@ namespace FireflyIII\Http\Controllers\Auth; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\TokenFormRequest; +use FireflyIII\User; use Illuminate\Cookie\CookieJar; use Illuminate\Http\Request; use Log; @@ -71,6 +72,7 @@ class TwoFactorController extends Controller */ public function lostTwoFactor() { + /** @var User $user */ $user = auth()->user(); $siteOwner = env('SITE_OWNER', ''); $title = (string)trans('firefly.two_factor_forgot_title'); diff --git a/app/Http/Controllers/BillController.php b/app/Http/Controllers/BillController.php index 06fc5c802b..7f4f4a0ad9 100644 --- a/app/Http/Controllers/BillController.php +++ b/app/Http/Controllers/BillController.php @@ -326,6 +326,7 @@ class BillController extends Controller $return = 'true'; } + $group = null; // find first rule group, or create one: $count = $this->ruleGroupRepos->count(); if (0 === $count) { @@ -336,7 +337,7 @@ class BillController extends Controller $group = $this->ruleGroupRepos->store($data); } if ($count > 0) { - $group = $this->ruleGroupRepos->getActiveGroups(auth()->user())->first(); + $group = $this->ruleGroupRepos->getActiveGroups($bill->user)->first(); } // redirect to page that will create a new rule. diff --git a/app/Http/Controllers/BudgetController.php b/app/Http/Controllers/BudgetController.php index 8cfa44a2a6..68d7c9b230 100644 --- a/app/Http/Controllers/BudgetController.php +++ b/app/Http/Controllers/BudgetController.php @@ -298,6 +298,7 @@ class BudgetController extends Controller // select thing for last 12 periods: $previousLoop = []; + /** @var Carbon $previousDate */ $previousDate = clone $start; $count = 0; while ($count < 12) { @@ -310,6 +311,7 @@ class BudgetController extends Controller // select thing for next 12 periods: $nextLoop = []; + /** @var Carbon $nextDate */ $nextDate = clone $end; $nextDate->addDay(); $count = 0; @@ -368,7 +370,8 @@ class BudgetController extends Controller ]; $currency = app('amount')->getDefaultCurrency(); $range = Preferences::get('viewRange', '1M')->data; - $begin = app('navigation')->subtractPeriod($start, $range, 3); + /** @var Carbon $begin */ + $begin = app('navigation')->subtractPeriod($start, $range, 3); Log::debug(sprintf('Range is %s', $range)); Log::debug(sprintf('infoIncome begin is %s', $begin->format('Y-m-d'))); @@ -378,6 +381,7 @@ class BudgetController extends Controller $count = 0; $currentStart = clone $begin; while ($currentStart < $start) { + Log::debug(sprintf('Loop: currentStart is %s', $currentStart->format('Y-m-d'))); $currentEnd = app('navigation')->endOfPeriod($currentStart, $range); $total = bcadd($total, $this->repository->getAvailableBudget($currency, $currentStart, $currentEnd)); @@ -441,6 +445,7 @@ class BudgetController extends Controller // prep for "specific date" view. if ('all' !== $moment && \strlen($moment) > 0) { $start = new Carbon($moment); + /** @var Carbon $end */ $end = app('navigation')->endOfPeriod($start, $range); $subTitle = trans( 'firefly.without_budget_between', @@ -697,6 +702,7 @@ class BudgetController extends Controller $set = $collector->getJournals(); $sum = (string)($set->sum('transaction_amount') ?? '0'); $journals = $set->count(); + /** @noinspection PhpUndefinedMethodInspection */ $dateStr = $date['end']->format('Y-m-d'); $dateName = app('navigation')->periodShow($date['end'], $date['period']); $entries->push(['string' => $dateStr, 'name' => $dateName, 'count' => $journals, 'sum' => $sum, 'date' => clone $date['end']]); diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php index 2530c4fdbf..426609bc1c 100644 --- a/app/Http/Controllers/CategoryController.php +++ b/app/Http/Controllers/CategoryController.php @@ -192,7 +192,9 @@ class CategoryController extends Controller // prep for "specific date" view. if ('all' !== $moment && \strlen($moment) > 0) { + /** @var Carbon $start */ $start = app('navigation')->startOfPeriod(new Carbon($moment), $range); + /** @var Carbon $end */ $end = app('navigation')->endOfPeriod($start, $range); $subTitle = trans( 'firefly.without_category_between', @@ -257,6 +259,7 @@ class CategoryController extends Controller // prep for "specific date" view. if ('all' !== $moment && \strlen($moment) > 0) { $start = app('navigation')->startOfPeriod(new Carbon($moment), $range); + /** @var Carbon $end */ $end = app('navigation')->endOfPeriod($start, $range); $subTitle = trans( 'firefly.journals_in_period_for_category', @@ -406,6 +409,7 @@ class CategoryController extends Controller [TransactionType::DEPOSIT] ); $earned = $collector->getJournals()->sum('transaction_amount'); + /** @noinspection PhpUndefinedMethodInspection */ $dateStr = $date['end']->format('Y-m-d'); $dateName = app('navigation')->periodShow($date['end'], $date['period']); $entries->push( @@ -460,6 +464,7 @@ class CategoryController extends Controller foreach ($dates as $currentDate) { $spent = $this->repository->spentInPeriod(new Collection([$category]), $accounts, $currentDate['start'], $currentDate['end']); $earned = $this->repository->earnedInPeriod(new Collection([$category]), $accounts, $currentDate['start'], $currentDate['end']); + /** @noinspection PhpUndefinedMethodInspection */ $dateStr = $currentDate['end']->format('Y-m-d'); $dateName = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); diff --git a/app/Http/Controllers/Chart/AccountController.php b/app/Http/Controllers/Chart/AccountController.php index 345f0a6295..3ebf46d7bc 100644 --- a/app/Http/Controllers/Chart/AccountController.php +++ b/app/Http/Controllers/Chart/AccountController.php @@ -18,6 +18,7 @@ * You should have received a copy of the GNU General Public License * along with Firefly III. If not, see . */ +/** @noinspection NullPointerExceptionInspection */ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Chart; @@ -216,6 +217,7 @@ class AccountController extends Controller return $this->expenseCategory($account, $start, $end); } + /** * Shows the balances for all the user's frontpage accounts. * @@ -230,6 +232,8 @@ class AccountController extends Controller $defaultSet = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET])->pluck('id')->toArray(); Log::debug('Default set is ', $defaultSet); $frontPage = Preferences::get('frontPageAccounts', $defaultSet); + + Log::debug('Frontpage preference set is ', $frontPage->data); if (0 === \count($frontPage->data)) { $frontPage->data = $defaultSet; diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index 0ada5c8a2c..8b56d07d8f 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -107,6 +107,7 @@ class BudgetController extends Controller $current = app('navigation')->startOfPeriod($current, $step); while ($end >= $current) { + /** @var Carbon $currentEnd */ $currentEnd = app('navigation')->endOfPeriod($current, $step); if ('1Y' === $step) { $currentEnd->subDay(); // @codeCoverageIgnore @@ -182,9 +183,10 @@ class BudgetController extends Controller */ public function expenseAsset(Budget $budget, ?BudgetLimit $budgetLimit): JsonResponse { - $cache = new CacheProperties; + $budgetLimitId = null === $budgetLimit ? 0 : $budgetLimit->id; + $cache = new CacheProperties; $cache->addProperty($budget->id); - $cache->addProperty($budgetLimit->id ?? 0); + $cache->addProperty($budgetLimitId); $cache->addProperty('chart.budget.expense-asset'); if ($cache->has()) { return response()->json($cache->get()); // @codeCoverageIgnore @@ -193,7 +195,7 @@ class BudgetController extends Controller /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); $collector->setAllAssetAccounts()->setBudget($budget); - if (null !== $budgetLimit->id) { + if (null !== $budgetLimit) { $collector->setRange($budgetLimit->start_date, $budgetLimit->end_date); } @@ -227,9 +229,10 @@ class BudgetController extends Controller */ public function expenseCategory(Budget $budget, ?BudgetLimit $budgetLimit): JsonResponse { + $budgetLimitId = null === $budgetLimit ? 0 : $budgetLimit->id; $cache = new CacheProperties; $cache->addProperty($budget->id); - $cache->addProperty($budgetLimit->id ?? 0); + $cache->addProperty($budgetLimitId); $cache->addProperty('chart.budget.expense-category'); if ($cache->has()) { return response()->json($cache->get()); // @codeCoverageIgnore @@ -238,7 +241,7 @@ class BudgetController extends Controller /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); $collector->setAllAssetAccounts()->setBudget($budget)->withCategoryInformation(); - if (null !== $budgetLimit->id) { + if (null !== $budgetLimit) { $collector->setRange($budgetLimit->start_date, $budgetLimit->end_date); } @@ -274,9 +277,10 @@ class BudgetController extends Controller */ public function expenseExpense(Budget $budget, ?BudgetLimit $budgetLimit): JsonResponse { + $budgetLimitId = null === $budgetLimit ? 0 : $budgetLimit->id; $cache = new CacheProperties; $cache->addProperty($budget->id); - $cache->addProperty($budgetLimit->id ?? 0); + $cache->addProperty($budgetLimitId); $cache->addProperty('chart.budget.expense-expense'); if ($cache->has()) { return response()->json($cache->get()); // @codeCoverageIgnore @@ -285,7 +289,7 @@ class BudgetController extends Controller /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); $collector->setAllAssetAccounts()->setTypes([TransactionType::WITHDRAWAL])->setBudget($budget)->withOpposingAccount(); - if (null !== $budgetLimit->id) { + if (null !== $budgetLimit) { $collector->setRange($budgetLimit->start_date, $budgetLimit->end_date); } @@ -481,7 +485,9 @@ class BudgetController extends Controller $current = clone $start; $budgeted = []; while ($current < $end) { + /** @var Carbon $currentStart */ $currentStart = app('navigation')->startOfPeriod($current, $range); + /** @var Carbon $currentEnd */ $currentEnd = app('navigation')->endOfPeriod($current, $range); $budgetLimits = $this->repository->getBudgetLimits($budget, $currentStart, $currentEnd); $index = $currentStart->format($key); diff --git a/app/Http/Controllers/Chart/BudgetReportController.php b/app/Http/Controllers/Chart/BudgetReportController.php index 15c9d5276f..8927ecf773 100644 --- a/app/Http/Controllers/Chart/BudgetReportController.php +++ b/app/Http/Controllers/Chart/BudgetReportController.php @@ -191,6 +191,7 @@ class BudgetReportController extends Controller $chartData[$budget->id . '-left']['entries'][$label] = $leftOfLimits[$budgetLimitId]; } } + /** @var Carbon $currentStart */ $currentStart = clone $currentEnd; $currentStart->addDay(); } diff --git a/app/Http/Controllers/Chart/CategoryReportController.php b/app/Http/Controllers/Chart/CategoryReportController.php index 7225aca42c..ea2d1f22ce 100644 --- a/app/Http/Controllers/Chart/CategoryReportController.php +++ b/app/Http/Controllers/Chart/CategoryReportController.php @@ -248,6 +248,7 @@ class CategoryReportController extends Controller $chartData[$labelSumIn]['entries'][$label] = $sumOfIncome[$category->id]; $chartData[$labelSumOut]['entries'][$label] = $sumOfExpense[$category->id]; } + /** @var Carbon $currentStart */ $currentStart = clone $currentEnd; $currentStart->addDay(); } diff --git a/app/Http/Controllers/Chart/ExpenseReportController.php b/app/Http/Controllers/Chart/ExpenseReportController.php index 04baacfe3d..3bb7d264fc 100644 --- a/app/Http/Controllers/Chart/ExpenseReportController.php +++ b/app/Http/Controllers/Chart/ExpenseReportController.php @@ -165,6 +165,7 @@ class ExpenseReportController extends Controller $chartData[$labelSumIn]['entries'][$label] = $sumOfIncome[$exp->id]; $chartData[$labelSumOut]['entries'][$label] = $sumOfExpense[$exp->id]; } + /** @var Carbon $currentStart */ $currentStart = clone $currentEnd; $currentStart->addDay(); } diff --git a/app/Http/Controllers/Chart/TagReportController.php b/app/Http/Controllers/Chart/TagReportController.php index 5f56e4b9b1..8488049c85 100644 --- a/app/Http/Controllers/Chart/TagReportController.php +++ b/app/Http/Controllers/Chart/TagReportController.php @@ -237,6 +237,7 @@ class TagReportController extends Controller $chartData[$labelSumIn]['entries'][$label] = $sumOfIncome[$tag->id]; $chartData[$labelSumOut]['entries'][$label] = $sumOfExpense[$tag->id]; } + /** @var Carbon $currentStart */ $currentStart = clone $currentEnd; $currentStart->addDay(); } diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php index 7600f44082..14e652b05b 100644 --- a/app/Http/Controllers/CurrencyController.php +++ b/app/Http/Controllers/CurrencyController.php @@ -27,6 +27,7 @@ use FireflyIII\Http\Requests\CurrencyFormRequest; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\User; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Log; @@ -71,7 +72,9 @@ class CurrencyController extends Controller */ public function create(Request $request) { - if (!$this->userRepository->hasRole(auth()->user(), 'owner')) { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { $request->session()->flash('error', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')])); return redirect(route('currencies.index')); @@ -116,7 +119,9 @@ class CurrencyController extends Controller */ public function delete(Request $request, TransactionCurrency $currency) { - if (!$this->userRepository->hasRole(auth()->user(), 'owner')) { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { // @codeCoverageIgnoreStart $request->session()->flash('error', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')])); @@ -146,7 +151,9 @@ class CurrencyController extends Controller */ public function destroy(Request $request, TransactionCurrency $currency) { - if (!$this->userRepository->hasRole(auth()->user(), 'owner')) { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { // @codeCoverageIgnoreStart $request->session()->flash('error', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')])); @@ -175,7 +182,9 @@ class CurrencyController extends Controller */ public function edit(Request $request, TransactionCurrency $currency) { - if (!$this->userRepository->hasRole(auth()->user(), 'owner')) { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { // @codeCoverageIgnoreStart $request->session()->flash('error', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')])); @@ -203,6 +212,8 @@ class CurrencyController extends Controller */ public function index(Request $request) { + /** @var User $user */ + $user = auth()->user(); $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); $pageSize = (int)Preferences::get('listPageSize', 50)->data; $collection = $this->repository->get(); @@ -218,7 +229,7 @@ class CurrencyController extends Controller $defaultCurrency = $this->repository->getCurrencyByPreference(Preferences::get('currencyPreference', config('firefly.default_currency', 'EUR'))); $isOwner = true; - if (!$this->userRepository->hasRole(auth()->user(), 'owner')) { + if (!$this->userRepository->hasRole($user, 'owner')) { $request->session()->flash('info', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')])); $isOwner = false; } @@ -234,7 +245,9 @@ class CurrencyController extends Controller */ public function store(CurrencyFormRequest $request) { - if (!$this->userRepository->hasRole(auth()->user(), 'owner')) { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { // @codeCoverageIgnoreStart Log::error('User ' . auth()->user()->id . ' is not admin, but tried to store a currency.'); @@ -244,17 +257,24 @@ class CurrencyController extends Controller $data = $request->getCurrencyData(); $currency = $this->repository->store($data); - $request->session()->flash('success', trans('firefly.created_currency', ['name' => $currency->name])); + $redirect = redirect($this->getPreviousUri('currencies.create.uri')); + if (null !== $currency) { + $request->session()->flash('success', trans('firefly.created_currency', ['name' => $currency->name])); - if (1 === (int)$request->get('create_another')) { - // @codeCoverageIgnoreStart - $request->session()->put('currencies.create.fromStore', true); + if (1 === (int)$request->get('create_another')) { + // @codeCoverageIgnoreStart + $request->session()->put('currencies.create.fromStore', true); + + $redirect = redirect(route('currencies.create'))->withInput(); + // @codeCoverageIgnoreEnd + } + } + if (null === $currency) { + $request->session()->flash('error', trans('firefly.could_not_store_currency')); - return redirect(route('currencies.create'))->withInput(); - // @codeCoverageIgnoreEnd } - return redirect($this->getPreviousUri('currencies.create.uri')); + return $redirect; } @@ -266,7 +286,9 @@ class CurrencyController extends Controller */ public function update(CurrencyFormRequest $request, TransactionCurrency $currency) { - if (!$this->userRepository->hasRole(auth()->user(), 'owner')) { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { // @codeCoverageIgnoreStart $request->session()->flash('error', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')])); diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index e75cde15f6..909f7800bd 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -31,6 +31,7 @@ use FireflyIII\Http\Middleware\IsSandStormUser; use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; +use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; @@ -118,6 +119,7 @@ class HomeController extends Controller $start = session('start', Carbon::now()->startOfMonth()); /** @var Carbon $end */ $end = session('end', Carbon::now()->endOfMonth()); + /** @noinspection NullPointerExceptionInspection */ $accounts = $repository->getAccountsById($frontPage->data); $today = new Carbon; @@ -134,7 +136,9 @@ class HomeController extends Controller } // fire check update event: - event(new RequestedVersionCheckStatus(auth()->user())); + /** @var User $user */ + $user = auth()->user(); + event(new RequestedVersionCheckStatus($user)); return view( 'index', diff --git a/app/Http/Controllers/Import/IndexController.php b/app/Http/Controllers/Import/IndexController.php index f657afe4e2..a2b44d9ec4 100644 --- a/app/Http/Controllers/Import/IndexController.php +++ b/app/Http/Controllers/Import/IndexController.php @@ -28,6 +28,7 @@ use FireflyIII\Import\Prerequisites\PrerequisitesInterface; use FireflyIII\Models\ImportJob; use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\User; use Illuminate\Http\Response as LaravelResponse; use Log; @@ -117,7 +118,7 @@ class IndexController extends Controller } /** @var PrerequisitesInterface $providerPre */ $providerPre = app($class); - $providerPre->setUser(auth()->user()); + $providerPre->setUser($importJob->user); if (!$providerPre->isComplete()) { Log::debug('Job provider prerequisites are not yet filled in. Redirect to prerequisites-page.'); @@ -196,10 +197,12 @@ class IndexController extends Controller private function getProviders(): array { // get and filter all import routines: + /** @var User $user */ + $user = auth()->user(); /** @var array $config */ $providerNames = array_keys(config('import.enabled')); $providers = []; - $isDemoUser = $this->userRepository->hasRole(auth()->user(), 'demo'); + $isDemoUser = $this->userRepository->hasRole($user, 'demo'); $isDebug = (bool)config('app.debug'); foreach ($providerNames as $providerName) { //Log::debug(sprintf('Now with provider %s', $providerName)); @@ -230,7 +233,7 @@ class IndexController extends Controller //Log::debug('Will not check prerequisites.'); /** @var PrerequisitesInterface $object */ $object = app($class); - $object->setUser(auth()->user()); + $object->setUser($user); $result = $object->isComplete(); } $providers[$providerName]['prereq_complete'] = $result; diff --git a/app/Http/Controllers/Import/PrerequisitesController.php b/app/Http/Controllers/Import/PrerequisitesController.php index 0be0e864bb..6eee7edf1a 100644 --- a/app/Http/Controllers/Import/PrerequisitesController.php +++ b/app/Http/Controllers/Import/PrerequisitesController.php @@ -27,6 +27,7 @@ use FireflyIII\Http\Controllers\Controller; use FireflyIII\Import\Prerequisites\PrerequisitesInterface; use FireflyIII\Models\ImportJob; use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; +use FireflyIII\User; use Illuminate\Http\Request; use Log; @@ -73,7 +74,7 @@ class PrerequisitesController extends Controller { // catch impossible status: $allowed = ['new']; - if (null !== $importJob && !in_array($importJob->status, $allowed, true)) { + if (null !== $importJob && !\in_array($importJob->status, $allowed, true)) { Log::error(sprintf('Job has state "%s" but this Prerequisites::index() only accepts %s', $importJob->status, json_encode($allowed))); session()->flash('error', trans('import.bad_job_status', ['status' => $importJob->status])); @@ -85,9 +86,11 @@ class PrerequisitesController extends Controller if (!class_exists($class)) { throw new FireflyException(sprintf('No class to handle prerequisites for "%s".', $importProvider)); // @codeCoverageIgnore } + /** @var User $user */ + $user = auth()->user(); /** @var PrerequisitesInterface $object */ $object = app($class); - $object->setUser(auth()->user()); + $object->setUser($user); if (null !== $importJob && $object->isComplete()) { // update job: @@ -139,9 +142,11 @@ class PrerequisitesController extends Controller if (!class_exists($class)) { throw new FireflyException(sprintf('Cannot find class %s', $class)); // @codeCoverageIgnore } + /** @var User $user */ + $user = auth()->user(); /** @var PrerequisitesInterface $object */ $object = app($class); - $object->setUser(auth()->user()); + $object->setUser($user); Log::debug('Going to store entered prerequisites.'); // store post data $data = $request->all(); diff --git a/app/Http/Controllers/JavascriptController.php b/app/Http/Controllers/JavascriptController.php index cb0c1e1759..b7a3175c0a 100644 --- a/app/Http/Controllers/JavascriptController.php +++ b/app/Http/Controllers/JavascriptController.php @@ -48,14 +48,16 @@ class JavascriptController extends Controller { $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); $preference = Preferences::get('currencyPreference', config('firefly.default_currency', 'EUR')); - $default = $currencyRepository->findByCodeNull($preference->data); + /** @noinspection NullPointerExceptionInspection */ + $default = $currencyRepository->findByCodeNull($preference->data); $data = ['accounts' => []]; /** @var Account $account */ foreach ($accounts as $account) { - $accountId = $account->id; - $currency = (int)$repository->getMetaValue($account, 'currency_id'); + $accountId = $account->id; + $currency = (int)$repository->getMetaValue($account, 'currency_id'); + /** @noinspection NullPointerExceptionInspection */ $currency = 0 === $currency ? $default->id : $currency; $entry = ['preferredCurrency' => $currency, 'name' => $account->name]; $data['accounts'][$accountId] = $entry; @@ -113,8 +115,9 @@ class JavascriptController extends Controller $localeconv = localeconv(); $localeconv['frac_digits'] = $currency->decimal_places; $pref = Preferences::get('language', config('firefly.default_language', 'en_US')); - $lang = $pref->data; - $dateRange = $this->getDateRangeConfig(); + /** @noinspection NullPointerExceptionInspection */ + $lang = $pref->data; + $dateRange = $this->getDateRangeConfig(); $data = [ 'currencyCode' => $currency->code, @@ -173,7 +176,9 @@ class JavascriptController extends Controller $ranges[$index] = [$nextStart, $nextEnd]; // today: + /** @var Carbon $todayStart */ $todayStart = app('navigation')->startOfPeriod($today, $viewRange); + /** @var Carbon $todayEnd */ $todayEnd = app('navigation')->endOfPeriod($todayStart, $viewRange); if ($todayStart->ne($start) || $todayEnd->ne($end)) { $ranges[ucfirst((string)trans('firefly.today'))] = [$todayStart, $todayEnd]; diff --git a/app/Http/Controllers/Json/ExchangeController.php b/app/Http/Controllers/Json/ExchangeController.php index 6a3f6ce2ca..85e3b510ca 100644 --- a/app/Http/Controllers/Json/ExchangeController.php +++ b/app/Http/Controllers/Json/ExchangeController.php @@ -27,6 +27,7 @@ use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Services\Currency\ExchangeRateInterface; +use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Log; @@ -56,9 +57,11 @@ class ExchangeController extends Controller Log::debug(sprintf('No cached exchange rate in database for %s to %s on %s', $fromCurrency->code, $toCurrency->code, $date->format('Y-m-d'))); // create service: + /** @var User $user */ + $user = auth()->user(); /** @var ExchangeRateInterface $service */ $service = app(ExchangeRateInterface::class); - $service->setUser(auth()->user()); + $service->setUser($user); // get rate: $rate = $service->getRate($fromCurrency, $toCurrency, $date); diff --git a/app/Http/Controllers/Popup/ReportController.php b/app/Http/Controllers/Popup/ReportController.php index 3806ba4414..e078eb8cb5 100644 --- a/app/Http/Controllers/Popup/ReportController.php +++ b/app/Http/Controllers/Popup/ReportController.php @@ -130,12 +130,13 @@ class ReportController extends Controller $account = $this->accountRepository->findNull((int)$attributes['accountId']); + switch (true) { - case BalanceLine::ROLE_DEFAULTROLE === $role && null !== $budget->id: + case BalanceLine::ROLE_DEFAULTROLE === $role && null !== $budget && null !== $account: // normal row with a budget: $journals = $this->popupHelper->balanceForBudget($budget, $account, $attributes); break; - case BalanceLine::ROLE_DEFAULTROLE === $role && null === $budget->id: + case BalanceLine::ROLE_DEFAULTROLE === $role && null === $budget && null !== $account: // normal row without a budget: $journals = $this->popupHelper->balanceForNoBudget($account, $attributes); $budget->name = (string)trans('firefly.no_budget'); @@ -160,6 +161,9 @@ class ReportController extends Controller private function budgetSpentAmount(array $attributes): string { $budget = $this->budgetRepository->findNull((int)$attributes['budgetId']); + if(null === $budget) { + throw new FireflyException('This is an unknown budget. Apologies.'); + } $journals = $this->popupHelper->byBudget($budget, $attributes); $view = view('popup.report.budget-spent-amount', compact('journals', 'budget'))->render(); @@ -177,6 +181,11 @@ class ReportController extends Controller private function categoryEntry(array $attributes): string { $category = $this->categoryRepository->findNull((int)$attributes['categoryId']); + + if(null === $category) { + throw new FireflyException('This is an unknown category. Apologies.'); + } + $journals = $this->popupHelper->byCategory($category, $attributes); $view = view('popup.report.category-entry', compact('journals', 'category'))->render(); @@ -194,6 +203,11 @@ class ReportController extends Controller private function expenseEntry(array $attributes): string { $account = $this->accountRepository->findNull((int)$attributes['accountId']); + + if(null === $account) { + throw new FireflyException('This is an unknown account. Apologies.'); + } + $journals = $this->popupHelper->byExpenses($account, $attributes); $view = view('popup.report.expense-entry', compact('journals', 'account'))->render(); @@ -211,6 +225,11 @@ class ReportController extends Controller private function incomeEntry(array $attributes): string { $account = $this->accountRepository->findNull((int)$attributes['accountId']); + + if(null === $account) { + throw new FireflyException('This is an unknown category. Apologies.'); + } + $journals = $this->popupHelper->byIncome($account, $attributes); $view = view('popup.report.income-entry', compact('journals', 'account'))->render(); diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index 8a3c280ab9..ed7e3b9966 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -58,6 +58,7 @@ class PreferencesController extends Controller { $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); $viewRangePref = Preferences::get('viewRange', '1M'); + /** @noinspection NullPointerExceptionInspection */ $viewRange = $viewRangePref->data; $frontPageAccounts = Preferences::get('frontPageAccounts', []); $language = Preferences::get('language', config('firefly.default_language', 'en_US'))->data; diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 8076bbd8ec..53ee2857ed 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -39,6 +39,7 @@ use FireflyIII\User; use Google2FA; use Hash; use Illuminate\Contracts\Auth\Guard; +use Illuminate\Support\Collection; use Laravel\Passport\ClientRepository; use Laravel\Passport\Passport; use Log; @@ -123,6 +124,7 @@ class ProfileController extends Controller public function confirmEmailChange(UserRepositoryInterface $repository, string $token) { // find preference with this token value. + /** @var Collection $set */ $set = Preferences::findByName('email_change_confirm_token'); $user = null; Log::debug(sprintf('Found %d preferences', $set->count())); @@ -179,7 +181,9 @@ class ProfileController extends Controller */ public function enable2FA(UserRepositoryInterface $repository) { - if ($repository->hasRole(auth()->user(), 'demo')) { + /** @var User $user */ + $user = auth()->user(); + if ($repository->hasRole($user, 'demo')) { return redirect(route('profile.index')); } $hasTwoFactorAuthSecret = (null !== Preferences::get('twoFactorAuthSecret')); @@ -217,11 +221,13 @@ class ProfileController extends Controller $subTitle = auth()->user()->email; $userId = auth()->user()->id; $enabled2FA = 1 === (int)Preferences::get('twoFactorAuthEnabled', 0)->data; + /** @var User $user */ + $user = auth()->user(); // get access token or create one. $accessToken = Preferences::get('access_token', null); if (null === $accessToken) { - $token = auth()->user()->generateAccessToken(); + $token = $user->generateAccessToken(); $accessToken = Preferences::set('access_token', $token); } @@ -282,21 +288,23 @@ class ProfileController extends Controller // the request has already validated both new passwords must be equal. $current = $request->get('current_password'); $new = $request->get('new_password'); - + /** @var User $user */ + $user = auth()->user(); try { - $this->validatePassword(auth()->user(), $current, $new); + $this->validatePassword($user, $current, $new); } catch (ValidationException $e) { session()->flash('error', $e->getMessage()); return redirect(route('profile.change-password')); } - $repository->changePassword(auth()->user(), $request->get('new_password')); + $repository->changePassword($user, $request->get('new_password')); session()->flash('success', (string)trans('firefly.password_changed')); return redirect(route('profile.index')); } + /** @noinspection PhpUnusedParameterInspection */ /** * @param TokenFormRequest $request * @@ -326,6 +334,7 @@ class ProfileController extends Controller return redirect(route('profile.delete-account')); } + /** @var User $user */ $user = auth()->user(); Log::info(sprintf('User #%d has opted to delete their account', auth()->user()->id)); // make repository delete user: @@ -341,7 +350,9 @@ class ProfileController extends Controller */ public function regenerate() { - $token = auth()->user()->generateAccessToken(); + /** @var User $user */ + $user = auth()->user(); + $token = $user->generateAccessToken(); Preferences::set('access_token', $token); session()->flash('success', (string)trans('firefly.token_regenerated')); diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index ef392cff7d..c9b9633cc7 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -77,11 +77,10 @@ class ReportController extends Controller * @param Carbon $start * @param Carbon $end * - * @return string - * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|string * @throws \FireflyIII\Exceptions\FireflyException */ - public function accountReport(Collection $accounts, Collection $expense, Carbon $start, Carbon $end): string + public function accountReport(Collection $accounts, Collection $expense, Carbon $start, Carbon $end) { if ($end < $start) { return view('error')->with('message', trans('firefly.end_after_start_date')); // @codeCoverageIgnore @@ -111,11 +110,11 @@ class ReportController extends Controller * @param Carbon $start * @param Carbon $end * - * @return string + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|string * * @throws \FireflyIII\Exceptions\FireflyException */ - public function auditReport(Collection $accounts, Carbon $start, Carbon $end): string + public function auditReport(Collection $accounts, Carbon $start, Carbon $end) { if ($end < $start) { return view('error')->with('message', trans('firefly.end_after_start_date')); // @codeCoverageIgnore @@ -148,11 +147,11 @@ class ReportController extends Controller * @param Carbon $start * @param Carbon $end * - * @return string + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|string * * @throws \FireflyIII\Exceptions\FireflyException */ - public function budgetReport(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end): string + public function budgetReport(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) { if ($end < $start) { return view('error')->with('message', trans('firefly.end_after_start_date')); // @codeCoverageIgnore @@ -186,11 +185,11 @@ class ReportController extends Controller * @param Carbon $start * @param Carbon $end * - * @return string + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|string * * @throws \FireflyIII\Exceptions\FireflyException */ - public function categoryReport(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): string + public function categoryReport(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) { if ($end < $start) { return view('error')->with('message', trans('firefly.end_after_start_date')); // @codeCoverageIgnore @@ -223,11 +222,11 @@ class ReportController extends Controller * @param Carbon $start * @param Carbon $end * - * @return string + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|string * * @throws \FireflyIII\Exceptions\FireflyException */ - public function defaultReport(Collection $accounts, Carbon $start, Carbon $end): string + public function defaultReport(Collection $accounts, Carbon $start, Carbon $end) { if ($end < $start) { return view('error')->with('message', trans('firefly.end_after_start_date')); @@ -382,11 +381,11 @@ class ReportController extends Controller * @param Carbon $start * @param Carbon $end * - * @return string + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View|string * * @throws \FireflyIII\Exceptions\FireflyException */ - public function tagReport(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): string + public function tagReport(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { if ($end < $start) { return view('error')->with('message', trans('firefly.end_after_start_date')); // @codeCoverageIgnore @@ -427,7 +426,7 @@ class ReportController extends Controller $set = new Collection; $names = $revenue->pluck('name')->toArray(); foreach ($expense as $exp) { - if (in_array($exp->name, $names, true)) { + if (\in_array($exp->name, $names, true)) { $set->push($exp); } } diff --git a/app/Http/Controllers/RuleController.php b/app/Http/Controllers/RuleController.php index 2131227708..eea78dda22 100644 --- a/app/Http/Controllers/RuleController.php +++ b/app/Http/Controllers/RuleController.php @@ -38,6 +38,7 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Rule\RuleRepositoryInterface; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use FireflyIII\TransactionRules\TransactionMatcher; +use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; @@ -173,9 +174,9 @@ class RuleController extends Controller * * @param Rule $rule * - * @return \Illuminate\Http\RedirectResponse + * @return RedirectResponse */ - public function destroy(Rule $rule): \Illuminate\Http\RedirectResponse + public function destroy(Rule $rule): RedirectResponse { $title = $rule->title; $this->ruleRepos->destroy($rule); @@ -189,7 +190,7 @@ class RuleController extends Controller /** * @param Rule $rule * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + * @return RedirectResponse|\Illuminate\Routing\Redirector */ public function down(Rule $rule) { @@ -262,6 +263,8 @@ class RuleController extends Controller public function execute(SelectTransactionsRequest $request, Rule $rule): RedirectResponse { // Get parameters specified by the user + /** @var User $user */ + $user = auth()->user(); $accounts = $this->accountRepos->getAccountsById($request->get('accounts')); $startDate = new Carbon($request->get('start_date')); $endDate = new Carbon($request->get('end_date')); @@ -270,7 +273,7 @@ class RuleController extends Controller $job = new ExecuteRuleOnExistingTransactions($rule); // Apply parameters to the job - $job->setUser(auth()->user()); + $job->setUser($user); $job->setAccounts($accounts); $job->setStartDate($startDate); $job->setEndDate($endDate); @@ -289,9 +292,11 @@ class RuleController extends Controller */ public function index() { + /** @var User $user */ + $user = auth()->user(); $this->createDefaultRuleGroup(); $this->createDefaultRule(); - $ruleGroups = $this->ruleGroupRepos->getRuleGroupsWithRules(auth()->user()); + $ruleGroups = $this->ruleGroupRepos->getRuleGroupsWithRules($user); return view('rules.index', compact('ruleGroups')); } @@ -346,7 +351,7 @@ class RuleController extends Controller /** * @param RuleFormRequest $request * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + * @return RedirectResponse|\Illuminate\Routing\Redirector */ public function store(RuleFormRequest $request) { @@ -505,7 +510,7 @@ class RuleController extends Controller /** * @param Rule $rule * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + * @return RedirectResponse|\Illuminate\Routing\Redirector */ public function up(Rule $rule) { @@ -518,7 +523,7 @@ class RuleController extends Controller * @param RuleFormRequest $request * @param Rule $rule * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + * @return RedirectResponse|\Illuminate\Routing\Redirector */ public function update(RuleFormRequest $request, Rule $rule) { diff --git a/app/Http/Controllers/RuleGroupController.php b/app/Http/Controllers/RuleGroupController.php index f0fceaa363..030216a50c 100644 --- a/app/Http/Controllers/RuleGroupController.php +++ b/app/Http/Controllers/RuleGroupController.php @@ -29,6 +29,7 @@ use FireflyIII\Jobs\ExecuteRuleGroupOnExistingTransactions; use FireflyIII\Models\RuleGroup; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; +use FireflyIII\User; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; @@ -95,8 +96,12 @@ class RuleGroupController extends Controller */ public function destroy(Request $request, RuleGroupRepositoryInterface $repository, RuleGroup $ruleGroup) { + /** @var User $user */ + $user = auth()->user(); $title = $ruleGroup->title; - $moveTo = auth()->user()->ruleGroups()->find((int)$request->get('move_rules_before_delete')); + + /** @var RuleGroup $moveTo */ + $moveTo = $user->ruleGroups()->find((int)$request->get('move_rules_before_delete')); $repository->destroy($ruleGroup, $moveTo); @@ -157,6 +162,8 @@ class RuleGroupController extends Controller public function execute(SelectTransactionsRequest $request, AccountRepositoryInterface $repository, RuleGroup $ruleGroup): RedirectResponse { // Get parameters specified by the user + /** @var User $user */ + $user = auth()->user(); $accounts = $repository->getAccountsById($request->get('accounts')); $startDate = new Carbon($request->get('start_date')); $endDate = new Carbon($request->get('end_date')); @@ -165,7 +172,7 @@ class RuleGroupController extends Controller $job = new ExecuteRuleGroupOnExistingTransactions($ruleGroup); // Apply parameters to the job - $job->setUser(auth()->user()); + $job->setUser($user); $job->setAccounts($accounts); $job->setStartDate($startDate); $job->setEndDate($endDate); diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php index 60075db3f8..f5bb373679 100644 --- a/app/Http/Controllers/TagController.php +++ b/app/Http/Controllers/TagController.php @@ -194,6 +194,7 @@ class TagController extends Controller // prep for "specific date" view. if ('all' !== $moment && \strlen($moment) > 0) { $start = new Carbon($moment); + /** @var Carbon $end */ $end = app('navigation')->endOfPeriod($start, $range); $subTitle = trans( 'firefly.journals_in_period_for_tag', @@ -291,6 +292,7 @@ class TagController extends Controller { // get first and last tag date from tag: $range = app('preferences')->get('viewRange', '1M')->data; + /** @var Carbon $end */ $end = app('navigation')->endOfX($this->repository->lastUseDate($tag), $range, null); $start = $this->repository->firstUseDate($tag); @@ -322,6 +324,7 @@ class TagController extends Controller ]; $collection->push($arr); + /** @var Carbon $currentEnd */ $currentEnd = clone $currentStart; $currentEnd->subDay(); } diff --git a/app/Http/Controllers/Transaction/LinkController.php b/app/Http/Controllers/Transaction/LinkController.php index eca642a990..0d5a3d4998 100644 --- a/app/Http/Controllers/Transaction/LinkController.php +++ b/app/Http/Controllers/Transaction/LinkController.php @@ -106,7 +106,14 @@ class LinkController extends Controller return redirect(route('transactions.show', [$journal->id])); } - $other = $this->journalRepository->findNull($linkInfo['transaction_journal_id']); + $other = $this->journalRepository->findNull($linkInfo['transaction_journal_id']); + + if (null === $other) { + session()->flash('error', trans('firefly.invalid_link_selection')); + + return redirect(route('transactions.show', [$journal->id])); + } + $alreadyLinked = $this->repository->findLink($journal, $other); if ($other->id === $journal->id) { diff --git a/app/Http/Controllers/Transaction/MassController.php b/app/Http/Controllers/Transaction/MassController.php index cebd47ef29..18d0652ace 100644 --- a/app/Http/Controllers/Transaction/MassController.php +++ b/app/Http/Controllers/Transaction/MassController.php @@ -35,6 +35,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Transformers\TransactionTransformer; +use FireflyIII\User; use Illuminate\Support\Collection; use Illuminate\View\View as IlluminateView; use Symfony\Component\HttpFoundation\ParameterBag; @@ -122,8 +123,11 @@ class MassController extends Controller */ public function edit(Collection $journals): IlluminateView { + /** @var User $user */ + $user = auth()->user(); $subTitle = trans('firefly.mass_edit_journals'); + /** @var AccountRepositoryInterface $repository */ $repository = app(AccountRepositoryInterface::class); $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); @@ -140,7 +144,7 @@ class MassController extends Controller $transformer = new TransactionTransformer(new ParameterBag); /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); - $collector->setUser(auth()->user()); + $collector->setUser($user); $collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation(); $collector->setJournals($journals); $collector->addFilter(TransactionViewFilter::class); @@ -220,11 +224,6 @@ class MassController extends Controller 'foreign_amount' => $foreignAmount, 'foreign_currency_id' => $foreignCurrencyId, 'foreign_currency_code' => null, - //'native_amount' => $amount, - //'source_amount' => $amount, - //'foreign_amount' => $foreignAmount, - //'destination_amount' => $foreignAmount, - //'amount' => $foreignAmount, ]], 'currency_id' => $foreignCurrencyId, 'tags' => $tags, diff --git a/app/Http/Controllers/Transaction/SplitController.php b/app/Http/Controllers/Transaction/SplitController.php index 600ab2005c..7e58375cd7 100644 --- a/app/Http/Controllers/Transaction/SplitController.php +++ b/app/Http/Controllers/Transaction/SplitController.php @@ -266,6 +266,7 @@ class SplitController extends Controller foreach ($old as $index => $row) { if (isset($array[$index])) { + /** @noinspection SlowArrayOperationsInLoopInspection */ $array[$index] = array_merge($array[$index], $row); continue; } diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index c5d00da0af..60664653d9 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -162,9 +162,10 @@ class TransactionController extends Controller foreach ($transactionIds as $transactionId) { $transactionId = (int)$transactionId; $transaction = $this->repository->findTransaction($transactionId); - Log::debug(sprintf('Transaction ID is %d', $transaction->id)); - - $this->repository->reconcile($transaction); + if (null !== $transaction) { + Log::debug(sprintf('Transaction ID is %d', $transaction->id)); + $this->repository->reconcile($transaction); + } } return response()->json(['ok' => 'reconciled']); @@ -271,11 +272,13 @@ class TransactionController extends Controller $sums = $this->sumPerCurrency($journals); $dateName = app('navigation')->periodShow($currentDate['start'], $currentDate['period']); $sum = $journals->sum('transaction_amount'); + /** @noinspection PhpUndefinedMethodInspection */ $entries->push( [ 'name' => $dateName, 'sums' => $sums, 'sum' => $sum, + 'start' => $currentDate['start']->format('Y-m-d'), 'end' => $currentDate['end']->format('Y-m-d'), ] diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 0689d4b65e..522b1b77f2 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -89,9 +89,11 @@ class Authenticate if (empty($guards)) { try { // go for default guard: + /** @noinspection PhpUndefinedMethodInspection */ if ($this->auth->check()) { // do an extra check on user object. + /** @noinspection PhpUndefinedMethodInspection */ $user = $this->auth->authenticate(); if (1 === (int)$user->blocked) { $message = (string)trans('firefly.block_account_logout'); @@ -99,6 +101,7 @@ class Authenticate $message = (string)trans('firefly.email_changed_logout'); } app('session')->flash('logoutMessage', $message); + /** @noinspection PhpUndefinedMethodInspection */ $this->auth->logout(); throw new AuthenticationException('Blocked account.', $guards); @@ -114,13 +117,14 @@ class Authenticate ); // @codeCoverageIgnoreEnd } - + /** @noinspection PhpUndefinedMethodInspection */ return $this->auth->authenticate(); } // @codeCoverageIgnoreStart foreach ($guards as $guard) { if ($this->auth->guard($guard)->check()) { + /** @noinspection PhpVoidFunctionResultUsedInspection */ return $this->auth->shouldUse($guard); } } diff --git a/app/Http/Middleware/AuthenticateTwoFactor.php b/app/Http/Middleware/AuthenticateTwoFactor.php index af3d68a4b1..5b7a0a87f5 100644 --- a/app/Http/Middleware/AuthenticateTwoFactor.php +++ b/app/Http/Middleware/AuthenticateTwoFactor.php @@ -52,6 +52,7 @@ class AuthenticateTwoFactor } + /** @noinspection PhpUnusedParameterInspection */ /** * @param $request * @param Closure $next @@ -63,6 +64,7 @@ class AuthenticateTwoFactor */ public function handle($request, Closure $next, ...$guards) { + /** @noinspection PhpUndefinedMethodInspection */ if ($this->auth->guest()) { return response()->redirectTo(route('login')); } @@ -70,6 +72,7 @@ class AuthenticateTwoFactor $is2faEnabled = app('preferences')->get('twoFactorAuthEnabled', false)->data; $has2faSecret = null !== app('preferences')->get('twoFactorAuthSecret'); + /** @noinspection PhpUndefinedMethodInspection */ $is2faAuthed = 'true' === $request->cookie('twoFactorAuthenticated'); if ($is2faEnabled && $has2faSecret && !$is2faAuthed) { diff --git a/app/Http/Middleware/Binder.php b/app/Http/Middleware/Binder.php index fd321892fa..e6e702a564 100644 --- a/app/Http/Middleware/Binder.php +++ b/app/Http/Middleware/Binder.php @@ -54,6 +54,7 @@ class Binder $this->auth = $auth; } + /** @noinspection PhpUnusedParameterInspection */ /** * Handle an incoming request. * @@ -63,7 +64,6 @@ class Binder * * @return mixed * - */ public function handle($request, Closure $next, ...$guards) { diff --git a/app/Http/Middleware/IsDemoUser.php b/app/Http/Middleware/IsDemoUser.php index 0eb57d29e1..4b77966803 100644 --- a/app/Http/Middleware/IsDemoUser.php +++ b/app/Http/Middleware/IsDemoUser.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; use Closure; -use FireflyIII\Exceptions\IsDemoUserException; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Http\Request; diff --git a/app/Http/Middleware/Range.php b/app/Http/Middleware/Range.php index 64ab26fcfe..b51d3ec59b 100644 --- a/app/Http/Middleware/Range.php +++ b/app/Http/Middleware/Range.php @@ -78,6 +78,7 @@ class Range private function configureView(): void { $pref = Preferences::get('language', config('firefly.default_language', 'en_US')); + /** @noinspection NullPointerExceptionInspection */ $lang = $pref->data; App::setLocale($lang); Carbon::setLocale(substr($lang, 0, 2)); diff --git a/app/Http/Middleware/Sandstorm.php b/app/Http/Middleware/Sandstorm.php index 8e9b3eb8f1..34a60b8c16 100644 --- a/app/Http/Middleware/Sandstorm.php +++ b/app/Http/Middleware/Sandstorm.php @@ -74,6 +74,7 @@ class Sandstorm if (1 === $count && \strlen($userId) > 0) { // login as first user user. $user = $repository->first(); + /** @noinspection NullPointerExceptionInspection */ Auth::guard($guard)->login($user); View::share('SANDSTORM_ANON', false); @@ -83,6 +84,7 @@ class Sandstorm if (1 === $count && '' === $userId) { // login but indicate anonymous $user = User::first(); + /** @noinspection NullPointerExceptionInspection */ Auth::guard($guard)->login($user); View::share('SANDSTORM_ANON', true); diff --git a/app/Http/Requests/ConfigurationRequest.php b/app/Http/Requests/ConfigurationRequest.php index b5ff29aa74..74ec996eca 100644 --- a/app/Http/Requests/ConfigurationRequest.php +++ b/app/Http/Requests/ConfigurationRequest.php @@ -34,7 +34,7 @@ class ConfigurationRequest extends Request public function authorize(): bool { // Only allow logged in users and admins - return auth()->check() && auth()->user()->hasRole('owner'); + return auth()->check(); } /** diff --git a/app/Http/Requests/LinkTypeFormRequest.php b/app/Http/Requests/LinkTypeFormRequest.php index 86a696d47d..77cae53114 100644 --- a/app/Http/Requests/LinkTypeFormRequest.php +++ b/app/Http/Requests/LinkTypeFormRequest.php @@ -33,7 +33,7 @@ class LinkTypeFormRequest extends Request public function authorize(): bool { // Only allow logged and admins - return auth()->check() && auth()->user()->hasRole('owner'); + return auth()->check(); } /** diff --git a/app/Import/JobConfiguration/FakeJobConfiguration.php b/app/Import/JobConfiguration/FakeJobConfiguration.php index 3812a78d59..5408b030ad 100644 --- a/app/Import/JobConfiguration/FakeJobConfiguration.php +++ b/app/Import/JobConfiguration/FakeJobConfiguration.php @@ -73,9 +73,9 @@ class FakeJobConfiguration implements JobConfigurationInterface $artist = strtolower($data['artist'] ?? ''); $song = strtolower($data['song'] ?? ''); $album = strtolower($data['album'] ?? ''); - $applyRules = isset($data['apply_rules']) ? (int)$data['apply_rules'] === 1 : null; + $applyRules = isset($data['apply_rules']) ? 1 === (int)$data['apply_rules'] : null; $configuration = $this->importJob->configuration; - if ($artist === 'david bowie') { + if ('david bowie' === $artist) { // store artist $configuration['artist'] = $artist; } diff --git a/app/Models/Account.php b/app/Models/Account.php index adcfb61dc7..81093d68c5 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -45,6 +45,12 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property bool $active * @property string $virtual_balance * @property User $user + * @property mixed|null startBalance + * @property mixed|null endBalance + * @property string difference + * @property mixed|null endBalance + * @property mixed|null startBalance + * @property mixed|null lastActivityDate */ class Account extends Model { diff --git a/app/Models/Attachment.php b/app/Models/Attachment.php index c0d71a8fa7..913585ab8a 100644 --- a/app/Models/Attachment.php +++ b/app/Models/Attachment.php @@ -47,6 +47,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property int $size * @property User $user * @property bool $uploaded + * @property bool file_exists */ class Attachment extends Model { diff --git a/app/Models/BudgetLimit.php b/app/Models/BudgetLimit.php index 7559c258b2..15f11689a2 100644 --- a/app/Models/BudgetLimit.php +++ b/app/Models/BudgetLimit.php @@ -37,6 +37,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property Carbon $start_date * @property Carbon $end_date * @property string $amount + * @property int $budget_id + * @property string spent */ class BudgetLimit extends Model { @@ -46,7 +48,7 @@ class BudgetLimit extends Model * @var array */ protected $casts - = [ + = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'start_date' => 'date', diff --git a/app/Models/Category.php b/app/Models/Category.php index 24457e0d74..dd3a3fb818 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -32,9 +32,10 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class Category. * - * @property string $name - * @property int $id - * @property float $spent // used in category reports + * @property string $name + * @property int $id + * @property float $spent // used in category reports + * @property Carbon|null lastActivity */ class Category extends Model { diff --git a/app/Models/ExportJob.php b/app/Models/ExportJob.php index 4b75283367..8b16e88730 100644 --- a/app/Models/ExportJob.php +++ b/app/Models/ExportJob.php @@ -32,6 +32,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property User $user * @property string $key * @property int $user_id + * @property mixed status */ class ExportJob extends Model { diff --git a/app/Models/PiggyBankEvent.php b/app/Models/PiggyBankEvent.php index 66cf06cf1f..4410010937 100644 --- a/app/Models/PiggyBankEvent.php +++ b/app/Models/PiggyBankEvent.php @@ -31,6 +31,7 @@ use Illuminate\Database\Eloquent\Model; * @property int $transaction_journal_id * @property int $piggy_bank_id * @property int $id + * @property mixed date */ class PiggyBankEvent extends Model { diff --git a/app/Models/Preference.php b/app/Models/Preference.php index 19a337bb5c..fab0037bfc 100644 --- a/app/Models/Preference.php +++ b/app/Models/Preference.php @@ -40,6 +40,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property Carbon $updated_at * @property Carbon $created_at * @property int $id + * @property mixed user + * @property mixed user */ class Preference extends Model { diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php index 26e7d9fa0c..ef577f839e 100644 --- a/app/Models/TransactionCurrency.php +++ b/app/Models/TransactionCurrency.php @@ -33,6 +33,14 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property string $symbol * @property int $decimal_places * @property int $id + * @property mixed name + * @property mixed name + * @property mixed name + * @property mixed name + * @property mixed name + * @property mixed name + * @property mixed name + * @property mixed name * */ class TransactionCurrency extends Model diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index 45d4364e71..25df6439cc 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -49,6 +49,12 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property int transaction_currency_id * @property TransactionCurrency $transactionCurrency * @property Collection $tags + * @property mixed user_id + * @property mixed transactions + * @property int transaction_count + * @property Carbon interest_date + * @property Carbon book_date + * @property Carbon process_date */ class TransactionJournal extends Model { diff --git a/app/User.php b/app/User.php index 9834e58178..aad71c773e 100644 --- a/app/User.php +++ b/app/User.php @@ -59,9 +59,10 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * * @property int $id * @property string $email - * @property bool $isAdmin used in admin user controller. - * @property bool $has2FA used in admin user controller. - * @property array $prefs used in admin user controller. + * @property bool $isAdmin used in admin user controller. + * @property bool $has2FA used in admin user controller. + * @property array $prefs used in admin user controller. + * @property mixed password */ class User extends Authenticatable { diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index ad47b99796..303114c145 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -607,6 +607,7 @@ return [ 'cannot_delete_currency' => 'Cannot delete :name because it is still in use.', 'deleted_currency' => 'Currency :name deleted', 'created_currency' => 'Currency :name created', + 'could_not_store_currency' => 'Could not store the new currency.', 'updated_currency' => 'Currency :name updated', 'ask_site_owner' => 'Please ask :owner to add, remove or edit currencies.', 'currencies_intro' => 'Firefly III supports various currencies which you can set and enable here.',