. */ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Account; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Support\Http\Controllers\UserNavigation; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\View\View; /** * Class DeleteController */ class DeleteController extends Controller { use UserNavigation; /** @var AccountRepositoryInterface The account repository */ private $repository; /** * DeleteController constructor. * * @codeCoverageIgnore */ public function __construct() { parent::__construct(); // translations: $this->middleware( function ($request, $next) { app('view')->share('mainTitleIcon', 'fa-credit-card'); app('view')->share('title', (string) trans('firefly.accounts')); $this->repository = app(AccountRepositoryInterface::class); return $next($request); } ); } /** * Delete account screen. * * @param Account $account * * @return Factory|RedirectResponse|Redirector|View */ public function delete(Account $account) { if (!$this->isEditableAccount($account)) { return $this->redirectAccountToAccount($account); // @codeCoverageIgnore } $typeName = config(sprintf('firefly.shortNamesByFullName.%s', $account->accountType->type)); $subTitle = (string) trans(sprintf('firefly.delete_%s_account', $typeName), ['name' => $account->name]); $accountList = app('expandedform')->makeSelectListWithEmpty($this->repository->getAccountsByType([$account->accountType->type])); $objectType = $typeName; unset($accountList[$account->id]); // put previous url in session $this->rememberPreviousUri('accounts.delete.uri'); return view('accounts.delete', compact('account', 'subTitle', 'accountList', 'objectType')); } /** * Delete the account. * * @param Request $request * @param Account $account * * @return RedirectResponse|Redirector */ public function destroy(Request $request, Account $account) { if (!$this->isEditableAccount($account)) { return $this->redirectAccountToAccount($account); // @codeCoverageIgnore } $type = $account->accountType->type; $typeName = config(sprintf('firefly.shortNamesByFullName.%s', $type)); $name = $account->name; $moveTo = $this->repository->findNull((int) $request->get('move_account_before_delete')); $this->repository->destroy($account, $moveTo); $request->session()->flash('success', (string) trans(sprintf('firefly.%s_deleted', $typeName), ['name' => $name])); app('preferences')->mark(); return redirect($this->getPreviousUri('accounts.delete.uri')); } }