. */ declare(strict_types=1); namespace FireflyIII\Http\Middleware; use Closure; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use Illuminate\Http\Request; use Preferences; /** * Class InterestingMessage */ class InterestingMessage { /** * Flashes the user an interesting message if the URL parameters warrant it. * * @param Request $request * @param Closure $next * * @return mixed * */ public function handle(Request $request, Closure $next) { if ($this->testing()) { return $next($request); } if ($this->groupMessage($request)) { Preferences::mark(); $this->handleGroupMessage($request); } return $next($request); } /** * @return bool */ private function testing(): bool { // ignore middleware in test environment. return 'testing' === config('app.env') || !auth()->check(); } /** * @param Request $request * * @return bool */ private function groupMessage(Request $request): bool { // get parameters from request. $transactionGroupId = $request->get('transaction_group_id'); $message = $request->get('message'); return null !== $transactionGroupId && null !== $message; } /** * @param Request $request */ private function handleGroupMessage(Request $request): void { // get parameters from request. $transactionGroupId = $request->get('transaction_group_id'); $message = $request->get('message'); // send message about newly created transaction group. /** @var TransactionGroup $group */ $group = auth()->user()->transactionGroups()->with(['transactionJournals', 'transactionJournals.transactionType'])->find((int)$transactionGroupId); if (null === $group) { return; } $count = $group->transactionJournals->count(); /** @var TransactionJournal $journal */ $journal = $group->transactionJournals->first(); if (null === $journal) { return; } $title = $count > 1 ? $group->title : $journal->description; if ('created' === $message) { session()->flash('success_uri', route('transactions.show', [$transactionGroupId])); session()->flash('success', (string)trans('firefly.stored_journal', ['description' => $title])); } if ('updated' === $message) { $type = strtolower($journal->transactionType->type); session()->flash('success_uri', route('transactions.show', [$transactionGroupId])); session()->flash('success', (string)trans(sprintf('firefly.updated_%s', $type), ['description' => $title])); } if ('no_change' === $message) { $type = strtolower($journal->transactionType->type); session()->flash('warning_uri', route('transactions.show', [$transactionGroupId])); session()->flash('warning', (string)trans(sprintf('firefly.no_changes_%s', $type), ['description' => $title])); } } }