firefly-iii/app/Http/Controllers/Controller.php

176 lines
6.2 KiB
PHP
Raw Normal View History

<?php
/**
* Controller.php
2017-10-21 01:40:00 -05:00
* Copyright (c) 2017 thegrumpydictator@gmail.com
*
2017-10-21 01:40:00 -05:00
* This file is part of Firefly III.
*
2017-10-21 01:40:00 -05:00
* Firefly III is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Firefly III is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
2017-12-17 07:41:58 -06:00
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
2015-02-05 21:39:52 -06:00
namespace FireflyIII\Http\Controllers;
2016-12-28 04:34:00 -06:00
use FireflyConfig;
2016-11-22 12:10:17 -06:00
use FireflyIII\Models\AccountType;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\TransactionType;
use FireflyIII\Support\Facades\Preferences;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
2015-06-13 03:02:36 -05:00
use Illuminate\Foundation\Bus\DispatchesJobs;
2015-02-05 21:39:52 -06:00
use Illuminate\Foundation\Validation\ValidatesRequests;
2015-02-11 00:35:10 -06:00
use Illuminate\Routing\Controller as BaseController;
2017-07-22 03:50:30 -05:00
use Log;
use Route;
2016-11-22 12:10:17 -06:00
use Session;
2017-02-05 01:26:54 -06:00
use URL;
2016-01-09 00:48:45 -06:00
use View;
2015-02-05 21:39:52 -06:00
2015-02-11 00:35:10 -06:00
/**
2017-11-15 05:25:49 -06:00
* Class Controller.
2015-02-11 00:35:10 -06:00
*/
class Controller extends BaseController
2015-02-11 00:35:10 -06:00
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
2015-05-14 06:41:21 -05:00
2017-11-15 05:25:49 -06:00
/** @var string */
2016-03-01 14:31:25 -06:00
protected $dateTimeFormat;
/** @var string */
2016-01-09 00:48:45 -06:00
protected $monthAndDayFormat;
/** @var string */
2016-01-24 08:58:16 -06:00
protected $monthFormat;
2017-10-05 04:49:06 -05:00
/** @var string */
protected $redirectUri = '/';
2016-01-09 00:48:45 -06:00
2015-04-28 08:26:30 -05:00
/**
* Controller constructor.
2015-04-28 08:26:30 -05:00
*/
public function __construct()
{
2017-07-22 03:50:30 -05:00
// for transaction lists:
2015-04-28 08:26:30 -05:00
View::share('hideBudgets', false);
View::share('hideCategories', false);
View::share('hideBills', false);
View::share('hideTags', false);
2017-07-22 03:50:30 -05:00
// is site a demo site?
2016-12-26 02:18:45 -06:00
$isDemoSite = FireflyConfig::get('is_demo_site', config('firefly.configuration.is_demo_site'))->data;
View::share('IS_DEMO_SITE', $isDemoSite);
2016-12-28 04:34:00 -06:00
View::share('DEMO_USERNAME', env('DEMO_USERNAME', ''));
View::share('DEMO_PASSWORD', env('DEMO_PASSWORD', ''));
View::share('FF_VERSION', config('firefly.version'));
2016-10-29 00:44:46 -05:00
$this->middleware(
function ($request, $next) {
2017-07-22 03:50:30 -05:00
// translations for specific strings:
2016-10-29 00:44:46 -05:00
$this->monthFormat = (string)trans('config.month');
$this->monthAndDayFormat = (string)trans('config.month_and_day');
$this->dateTimeFormat = (string)trans('config.date_time');
// get shown-intro-preference:
if (auth()->check()) {
2017-07-22 03:50:30 -05:00
// some routes have a "what" parameter, which indicates a special page:
2017-11-15 05:25:49 -06:00
$specificPage = null === Route::current()->parameter('what') ? '' : '_' . Route::current()->parameter('what');
2017-07-22 03:50:30 -05:00
$page = str_replace('.', '_', Route::currentRouteName());
// indicator if user has seen the help for this page ( + special page):
$key = 'shown_demo_' . $page . $specificPage;
// is there an intro for this route?
$intro = config('intro.' . $page);
$specialIntro = config('intro.' . $page . $specificPage);
$shownDemo = true;
// either must be array and either must be > 0
if ((is_array($intro) || is_array($specialIntro)) && (count($intro) > 0 || count($specialIntro) > 0)) {
$shownDemo = Preferences::get($key, false)->data;
Log::debug(sprintf('Check if user has already seen intro with key "%s". Result is %d', $key, $shownDemo));
2017-07-16 00:35:08 -05:00
}
2017-07-22 03:50:30 -05:00
View::share('shownDemo', $shownDemo);
2017-07-22 03:50:30 -05:00
View::share('current_route_name', $page);
View::share('original_route_name', Route::currentRouteName());
}
2016-10-29 00:44:46 -05:00
return $next($request);
}
);
2015-04-28 08:26:30 -05:00
}
2015-12-31 10:20:54 -06:00
2017-02-05 01:26:54 -06:00
/**
2017-11-15 05:25:49 -06:00
* Functionality:.
2017-02-05 01:26:54 -06:00
*
* - If the $identifier contains the word "delete" then a remembered uri with the text "/show/" in it will not be returned but instead the index (/)
* will be returned.
* - If the remembered uri contains "javascript/" the remembered uri will not be returned but instead the index (/) will be returned.
*
* @param string $identifier
*
* @return string
*/
protected function getPreviousUri(string $identifier): string
{
$uri = strval(session($identifier));
2017-11-15 05:25:49 -06:00
if (!(false === strpos($identifier, 'delete')) && !(false === strpos($uri, '/show/'))) {
$uri = $this->redirectUri;
2017-02-05 01:26:54 -06:00
}
2017-11-15 05:25:49 -06:00
if (!(false === strpos($uri, 'jscript'))) {
$uri = $this->redirectUri; // @codeCoverageIgnore
2017-02-05 01:26:54 -06:00
}
return $uri;
}
2016-11-22 12:10:17 -06:00
/**
* @param TransactionJournal $journal
*
* @return bool
*/
protected function isOpeningBalance(TransactionJournal $journal): bool
{
2017-11-15 05:25:49 -06:00
return TransactionType::OPENING_BALANCE === $journal->transactionTypeStr();
2016-11-22 12:10:17 -06:00
}
/**
* @param TransactionJournal $journal
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
protected function redirectToAccount(TransactionJournal $journal)
{
$valid = [AccountType::DEFAULT, AccountType::ASSET];
$transactions = $journal->transactions;
/** @var Transaction $transaction */
foreach ($transactions as $transaction) {
$account = $transaction->account;
if (in_array($account->accountType->type, $valid)) {
return redirect(route('accounts.show', [$account->id]));
}
}
2017-03-18 14:53:44 -05:00
// @codeCoverageIgnoreStart
2016-11-22 12:10:17 -06:00
Session::flash('error', strval(trans('firefly.cannot_redirect_to_account')));
return redirect(route('index'));
2017-03-18 14:53:44 -05:00
// @codeCoverageIgnoreEnd
2016-11-22 12:10:17 -06:00
}
2017-02-05 01:26:54 -06:00
/**
* @param string $identifier
*/
protected function rememberPreviousUri(string $identifier)
{
Session::put($identifier, URL::previous());
}
2015-02-05 21:39:52 -06:00
}