mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2024-12-28 09:51:21 -06:00
Some new stuffs.
This commit is contained in:
parent
c4d8a0da05
commit
de715c14be
@ -1,24 +1,22 @@
|
|||||||
<?php namespace FireflyIII\Http\Controllers;
|
<?php namespace FireflyIII\Http\Controllers;
|
||||||
|
|
||||||
|
use Preferences;
|
||||||
|
use Navigation;
|
||||||
|
use Redirect;
|
||||||
|
use URL;
|
||||||
|
use Session;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class HomeController
|
||||||
|
*
|
||||||
|
* @package FireflyIII\Http\Controllers
|
||||||
|
*/
|
||||||
class HomeController extends Controller
|
class HomeController extends Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Home Controller
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| This controller renders your application's "dashboard" for users that
|
|
||||||
| are authenticated. Of course, you are free to change or remove the
|
|
||||||
| controller as you wish. It is just here to get your app started!
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new controller instance.
|
|
||||||
*
|
*
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
@ -28,9 +26,7 @@ class HomeController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show the application dashboard to the user.
|
* @return \Illuminate\View\View
|
||||||
*
|
|
||||||
* @return Response
|
|
||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
@ -44,4 +40,40 @@ class HomeController extends Controller
|
|||||||
return view('index', compact('count', 'title', 'subTitle', 'mainTitleIcon','transactions'));
|
return view('index', compact('count', 'title', 'subTitle', 'mainTitleIcon','transactions'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $range
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function rangeJump($range)
|
||||||
|
{
|
||||||
|
|
||||||
|
$valid = ['1D', '1W', '1M', '3M', '6M', '1Y',];
|
||||||
|
|
||||||
|
if (in_array($range, $valid)) {
|
||||||
|
Preferences::set('viewRange', $range);
|
||||||
|
Session::forget('range');
|
||||||
|
}
|
||||||
|
return Redirect::to(URL::previous());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
*/
|
||||||
|
public function sessionNext()
|
||||||
|
{
|
||||||
|
Navigation::next();
|
||||||
|
return Redirect::to(URL::previous());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
*/
|
||||||
|
public function sessionPrev()
|
||||||
|
{
|
||||||
|
Navigation::prev();
|
||||||
|
return Redirect::to(URL::previous());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ use Closure;
|
|||||||
use FireflyIII\Exception\FireflyException;
|
use FireflyIII\Exception\FireflyException;
|
||||||
use Illuminate\Contracts\Auth\Guard;
|
use Illuminate\Contracts\Auth\Guard;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
|
use Navigation;
|
||||||
use Preferences;
|
use Preferences;
|
||||||
use Session;
|
use Session;
|
||||||
|
|
||||||
@ -55,18 +56,18 @@ class Range
|
|||||||
|
|
||||||
// the start and end date are checked and stored:
|
// the start and end date are checked and stored:
|
||||||
$start = Session::has('start') ? Session::get('start') : new Carbon;
|
$start = Session::has('start') ? Session::get('start') : new Carbon;
|
||||||
$start = $this->updateStartDate($viewRange->data, $start);
|
$start = Navigation::updateStartDate($viewRange->data, $start);
|
||||||
$end = $this->updateEndDate($viewRange->data, $start);
|
$end = Navigation::updateEndDate($viewRange->data, $start);
|
||||||
$period = $this->periodName($viewRange->data, $start);
|
$period = Navigation::periodName($viewRange->data, $start);
|
||||||
$prev = $this->previous($viewRange->data, clone $start);
|
$prev = Navigation::jumpToPrevious($viewRange->data, clone $start);
|
||||||
$next = $this->next($viewRange->data, clone $start);
|
$next = Navigation::jumpToNext($viewRange->data, clone $start);
|
||||||
|
|
||||||
Session::put('range', $viewRange->data);
|
Session::put('range', $viewRange->data);
|
||||||
Session::put('start', $start);
|
Session::put('start', $start);
|
||||||
Session::put('end', $end);
|
Session::put('end', $end);
|
||||||
Session::put('period', $period);
|
Session::put('period', $period);
|
||||||
Session::put('prev', $this->periodName($viewRange->data, $prev));
|
Session::put('prev', Navigation::periodName($viewRange->data, $prev));
|
||||||
Session::put('next', $this->periodName($viewRange->data, $next));
|
Session::put('next', Navigation::periodName($viewRange->data, $next));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,220 +75,4 @@ class Range
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $range
|
|
||||||
* @param Carbon $start
|
|
||||||
*
|
|
||||||
* @return Carbon
|
|
||||||
* @throws FireflyException
|
|
||||||
* @codeCoverageIgnore
|
|
||||||
*/
|
|
||||||
protected function updateStartDate($range, Carbon $start)
|
|
||||||
{
|
|
||||||
$functionMap = [
|
|
||||||
'1D' => 'startOfDay',
|
|
||||||
'1W' => 'startOfWeek',
|
|
||||||
'1M' => 'startOfMonth',
|
|
||||||
'3M' => 'firstOfQuarter',
|
|
||||||
'1Y' => 'startOfYear',
|
|
||||||
];
|
|
||||||
if (isset($functionMap[$range])) {
|
|
||||||
$function = $functionMap[$range];
|
|
||||||
$start->$function();
|
|
||||||
|
|
||||||
return $start;
|
|
||||||
}
|
|
||||||
if ($range == '6M') {
|
|
||||||
if (intval($start->format('m')) >= 7) {
|
|
||||||
$start->startOfYear()->addMonths(6);
|
|
||||||
} else {
|
|
||||||
$start->startOfYear();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $start;
|
|
||||||
}
|
|
||||||
throw new FireflyException('updateStartDate cannot handle $range ' . $range);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $range
|
|
||||||
* @param Carbon $start
|
|
||||||
*
|
|
||||||
* @return Carbon
|
|
||||||
* @throws FireflyException
|
|
||||||
* @codeCoverageIgnore
|
|
||||||
*/
|
|
||||||
protected function updateEndDate($range, Carbon $start)
|
|
||||||
{
|
|
||||||
$functionMap = [
|
|
||||||
'1D' => 'endOfDay',
|
|
||||||
'1W' => 'endOfWeek',
|
|
||||||
'1M' => 'endOfMonth',
|
|
||||||
'3M' => 'lastOfQuarter',
|
|
||||||
'1Y' => 'endOfYear',
|
|
||||||
];
|
|
||||||
$end = clone $start;
|
|
||||||
|
|
||||||
if (isset($functionMap[$range])) {
|
|
||||||
$function = $functionMap[$range];
|
|
||||||
$end->$function();
|
|
||||||
|
|
||||||
return $end;
|
|
||||||
}
|
|
||||||
if ($range == '6M') {
|
|
||||||
if (intval($start->format('m')) >= 7) {
|
|
||||||
$end->endOfYear();
|
|
||||||
} else {
|
|
||||||
$end->startOfYear()->addMonths(6);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $end;
|
|
||||||
}
|
|
||||||
throw new FireflyException('updateEndDate cannot handle $range ' . $range);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @SuppressWarnings("CyclomaticComplexity") // It's exactly 5. So I don't mind.
|
|
||||||
*
|
|
||||||
* @param $range
|
|
||||||
* @param Carbon $date
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
* @throws FireflyException
|
|
||||||
* @codeCoverageIgnore
|
|
||||||
*/
|
|
||||||
protected function periodName($range, Carbon $date)
|
|
||||||
{
|
|
||||||
$formatMap = [
|
|
||||||
'1D' => 'jS F Y',
|
|
||||||
'1W' => '\w\e\ek W, Y',
|
|
||||||
'1M' => 'F Y',
|
|
||||||
'1Y' => 'Y',
|
|
||||||
];
|
|
||||||
if (isset($formatMap[$range])) {
|
|
||||||
return $date->format($formatMap[$range]);
|
|
||||||
}
|
|
||||||
if ($range == '3M') {
|
|
||||||
$month = intval($date->format('m'));
|
|
||||||
|
|
||||||
return 'Q' . ceil(($month / 12) * 4) . ' ' . $date->format('Y');
|
|
||||||
}
|
|
||||||
if ($range == '6M') {
|
|
||||||
$month = intval($date->format('m'));
|
|
||||||
$half = ceil(($month / 12) * 2);
|
|
||||||
$halfName = $half == 1 ? 'first' : 'second';
|
|
||||||
|
|
||||||
return $halfName . ' half of ' . $date->format('d-m-Y');
|
|
||||||
}
|
|
||||||
throw new FireflyException('No _periodName() for range "' . $range . '"');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $range
|
|
||||||
* @param Carbon $date
|
|
||||||
*
|
|
||||||
* @return Carbon
|
|
||||||
* @throws FireflyException
|
|
||||||
*/
|
|
||||||
public function previous($range, Carbon $date)
|
|
||||||
{
|
|
||||||
$functionMap = [
|
|
||||||
'1D' => 'Day',
|
|
||||||
'1W' => 'Week',
|
|
||||||
'1M' => 'Month',
|
|
||||||
'1Y' => 'Year'
|
|
||||||
];
|
|
||||||
|
|
||||||
if (isset($functionMap[$range])) {
|
|
||||||
$startFunction = 'startOf' . $functionMap[$range];
|
|
||||||
$subFunction = 'sub' . $functionMap[$range];
|
|
||||||
$date->$startFunction()->$subFunction();
|
|
||||||
|
|
||||||
return $date;
|
|
||||||
}
|
|
||||||
if ($range == '3M') {
|
|
||||||
$date->firstOfQuarter()->subMonths(3)->firstOfQuarter();
|
|
||||||
|
|
||||||
return $date;
|
|
||||||
}
|
|
||||||
if ($range == '6M') {
|
|
||||||
$month = intval($date->format('m'));
|
|
||||||
$date->startOfYear();
|
|
||||||
if ($month <= 6) {
|
|
||||||
$date->subMonths(6);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $date;
|
|
||||||
}
|
|
||||||
throw new FireflyException('Cannot do _previous() on ' . $range);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $range
|
|
||||||
* @param Carbon $date
|
|
||||||
*
|
|
||||||
* @return Carbon
|
|
||||||
* @throws FireflyException
|
|
||||||
*/
|
|
||||||
public function next($range, Carbon $date)
|
|
||||||
{
|
|
||||||
switch ($range) {
|
|
||||||
case '1D':
|
|
||||||
$date->endOfDay()->addDay();
|
|
||||||
break;
|
|
||||||
case '1W':
|
|
||||||
$date->endOfWeek()->addDay()->startOfWeek();
|
|
||||||
break;
|
|
||||||
case '1M':
|
|
||||||
$date->endOfMonth()->addDay()->startOfMonth();
|
|
||||||
break;
|
|
||||||
case '3M':
|
|
||||||
$date->lastOfQuarter()->addDay();
|
|
||||||
break;
|
|
||||||
case '6M':
|
|
||||||
if (intval($date->format('m')) >= 7) {
|
|
||||||
$date->startOfYear()->addYear();
|
|
||||||
} else {
|
|
||||||
$date->startOfYear()->addMonths(6);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case '1Y':
|
|
||||||
$date->startOfYear()->addYear();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new FireflyException('Cannot do _next() on ' . $range);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $date;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks and sets the currently set 'range' or defaults to a session
|
|
||||||
* and if that fails, defaults to 1M. Always returns the final value.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function setSessionRangeValue()
|
|
||||||
{
|
|
||||||
$viewRange = Preferences::get('viewRange', '1M');
|
|
||||||
if (!is_null(Session::get('range'))) {
|
|
||||||
// @codeCoverageIgnoreStart
|
|
||||||
$range = Session::get('range');
|
|
||||||
// @codeCoverageIgnoreEnd
|
|
||||||
} else {
|
|
||||||
Preferences::get('viewRange', '1M');
|
|
||||||
// /** @var \FireflyIII\Shared\Preferences\PreferencesInterface $preferences */
|
|
||||||
// $preferences = \App::make('FireflyIII\Shared\Preferences\PreferencesInterface');
|
|
||||||
// $viewRange = $preferences->get('viewRange', '1M');
|
|
||||||
// $range = $viewRange->data;
|
|
||||||
$range = '1M';
|
|
||||||
Session::put('range', $range);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $range;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -13,6 +13,11 @@ class FireflyServiceProvider extends ServiceProvider
|
|||||||
return new \FireflyIII\Support\Preferences;
|
return new \FireflyIII\Support\Preferences;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
$this->app->bind(
|
||||||
|
'navigation', function () {
|
||||||
|
return new \FireflyIII\Support\Navigation;
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
23
app/Support/Facades/Navigation.php
Normal file
23
app/Support/Facades/Navigation.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace FireflyIII\Support\Facades;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Facade;
|
||||||
|
/**
|
||||||
|
* Class Preferences
|
||||||
|
*
|
||||||
|
* @package FireflyIII\Support\Facades
|
||||||
|
*/
|
||||||
|
class Navigation extends Facade
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the registered name of the component.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected static function getFacadeAccessor()
|
||||||
|
{
|
||||||
|
return 'navigation';
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
185
app/Support/Navigation.php
Normal file
185
app/Support/Navigation.php
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace FireflyIII\Support;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use FireflyIII\Exception\FireflyException;
|
||||||
|
use Session;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Navigation
|
||||||
|
*
|
||||||
|
* @package FireflyIII\Support
|
||||||
|
*/
|
||||||
|
class Navigation
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public function jumpToPrevious($range, Carbon $date)
|
||||||
|
{
|
||||||
|
$functionMap = [
|
||||||
|
'1D' => 'Day',
|
||||||
|
'1W' => 'Week',
|
||||||
|
'1M' => 'Month',
|
||||||
|
'1Y' => 'Year'
|
||||||
|
];
|
||||||
|
|
||||||
|
if (isset($functionMap[$range])) {
|
||||||
|
$startFunction = 'startOf' . $functionMap[$range];
|
||||||
|
$subFunction = 'sub' . $functionMap[$range];
|
||||||
|
$date->$startFunction()->$subFunction();
|
||||||
|
|
||||||
|
return $date;
|
||||||
|
}
|
||||||
|
if ($range == '3M') {
|
||||||
|
$date->firstOfQuarter()->subMonths(3)->firstOfQuarter();
|
||||||
|
|
||||||
|
return $date;
|
||||||
|
}
|
||||||
|
if ($range == '6M') {
|
||||||
|
$month = intval($date->format('m'));
|
||||||
|
$date->startOfYear();
|
||||||
|
if ($month <= 6) {
|
||||||
|
$date->subMonths(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $date;
|
||||||
|
}
|
||||||
|
throw new FireflyException('Cannot do _previous() on ' . $range);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function next()
|
||||||
|
{
|
||||||
|
|
||||||
|
$range = Session::get('range');
|
||||||
|
$start = Session::get('start');
|
||||||
|
|
||||||
|
Session::put('start', Navigation::jumpToNext($range, clone $start));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function jumpToNext($range, Carbon $date)
|
||||||
|
{
|
||||||
|
switch ($range) {
|
||||||
|
case '1D':
|
||||||
|
$date->endOfDay()->addDay();
|
||||||
|
break;
|
||||||
|
case '1W':
|
||||||
|
$date->endOfWeek()->addDay()->startOfWeek();
|
||||||
|
break;
|
||||||
|
case '1M':
|
||||||
|
$date->endOfMonth()->addDay()->startOfMonth();
|
||||||
|
break;
|
||||||
|
case '3M':
|
||||||
|
$date->lastOfQuarter()->addDay();
|
||||||
|
break;
|
||||||
|
case '6M':
|
||||||
|
if (intval($date->format('m')) >= 7) {
|
||||||
|
$date->startOfYear()->addYear();
|
||||||
|
} else {
|
||||||
|
$date->startOfYear()->addMonths(6);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '1Y':
|
||||||
|
$date->startOfYear()->addYear();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new FireflyException('Cannot do _next() on ' . $range);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function periodName($range, Carbon $date)
|
||||||
|
{
|
||||||
|
$formatMap = [
|
||||||
|
'1D' => 'jS F Y',
|
||||||
|
'1W' => '\w\e\ek W, Y',
|
||||||
|
'1M' => 'F Y',
|
||||||
|
'1Y' => 'Y',
|
||||||
|
];
|
||||||
|
if (isset($formatMap[$range])) {
|
||||||
|
return $date->format($formatMap[$range]);
|
||||||
|
}
|
||||||
|
if ($range == '3M') {
|
||||||
|
$month = intval($date->format('m'));
|
||||||
|
|
||||||
|
return 'Q' . ceil(($month / 12) * 4) . ' ' . $date->format('Y');
|
||||||
|
}
|
||||||
|
if ($range == '6M') {
|
||||||
|
$month = intval($date->format('m'));
|
||||||
|
$half = ceil(($month / 12) * 2);
|
||||||
|
$halfName = $half == 1 ? 'first' : 'second';
|
||||||
|
|
||||||
|
return $halfName . ' half of ' . $date->format('Y');
|
||||||
|
}
|
||||||
|
throw new FireflyException('No _periodName() for range "' . $range . '"');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function prev()
|
||||||
|
{
|
||||||
|
$range = Session::get('range');
|
||||||
|
$start = Session::get('start');
|
||||||
|
|
||||||
|
Session::put('start', Navigation::jumpToPrevious($range, clone $start));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateEndDate($range, Carbon $start)
|
||||||
|
{
|
||||||
|
$functionMap = [
|
||||||
|
'1D' => 'endOfDay',
|
||||||
|
'1W' => 'endOfWeek',
|
||||||
|
'1M' => 'endOfMonth',
|
||||||
|
'3M' => 'lastOfQuarter',
|
||||||
|
'1Y' => 'endOfYear',
|
||||||
|
];
|
||||||
|
$end = clone $start;
|
||||||
|
|
||||||
|
if (isset($functionMap[$range])) {
|
||||||
|
$function = $functionMap[$range];
|
||||||
|
$end->$function();
|
||||||
|
|
||||||
|
return $end;
|
||||||
|
}
|
||||||
|
if ($range == '6M') {
|
||||||
|
if (intval($start->format('m')) >= 7) {
|
||||||
|
$end->endOfYear();
|
||||||
|
} else {
|
||||||
|
$end->startOfYear()->addMonths(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $end;
|
||||||
|
}
|
||||||
|
throw new FireflyException('updateEndDate cannot handle $range ' . $range);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateStartDate($range, Carbon $start)
|
||||||
|
{
|
||||||
|
$functionMap = [
|
||||||
|
'1D' => 'startOfDay',
|
||||||
|
'1W' => 'startOfWeek',
|
||||||
|
'1M' => 'startOfMonth',
|
||||||
|
'3M' => 'firstOfQuarter',
|
||||||
|
'1Y' => 'startOfYear',
|
||||||
|
];
|
||||||
|
if (isset($functionMap[$range])) {
|
||||||
|
$function = $functionMap[$range];
|
||||||
|
$start->$function();
|
||||||
|
|
||||||
|
return $start;
|
||||||
|
}
|
||||||
|
if ($range == '6M') {
|
||||||
|
if (intval($start->format('m')) >= 7) {
|
||||||
|
$start->startOfYear()->addMonths(6);
|
||||||
|
} else {
|
||||||
|
$start->startOfYear();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $start;
|
||||||
|
}
|
||||||
|
throw new FireflyException('updateStartDate cannot handle $range ' . $range);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -199,6 +199,7 @@ return [
|
|||||||
'Form' => 'Illuminate\Html\FormFacade',
|
'Form' => 'Illuminate\Html\FormFacade',
|
||||||
'Html' => 'Illuminate\Html\HtmlFacade',
|
'Html' => 'Illuminate\Html\HtmlFacade',
|
||||||
'Preferences' => 'FireflyIII\Support\Facades\Preferences',
|
'Preferences' => 'FireflyIII\Support\Facades\Preferences',
|
||||||
|
'Navigation' => 'FireflyIII\Support\Facades\Navigation',
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user