diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 490dbe1b45..a030940de4 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -1,24 +1,22 @@ updateStartDate($viewRange->data, $start); - $end = $this->updateEndDate($viewRange->data, $start); - $period = $this->periodName($viewRange->data, $start); - $prev = $this->previous($viewRange->data, clone $start); - $next = $this->next($viewRange->data, clone $start); + $start = Navigation::updateStartDate($viewRange->data, $start); + $end = Navigation::updateEndDate($viewRange->data, $start); + $period = Navigation::periodName($viewRange->data, $start); + $prev = Navigation::jumpToPrevious($viewRange->data, clone $start); + $next = Navigation::jumpToNext($viewRange->data, clone $start); Session::put('range', $viewRange->data); Session::put('start', $start); Session::put('end', $end); Session::put('period', $period); - Session::put('prev', $this->periodName($viewRange->data, $prev)); - Session::put('next', $this->periodName($viewRange->data, $next)); + Session::put('prev', Navigation::periodName($viewRange->data, $prev)); + 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; - - } - - } \ No newline at end of file diff --git a/app/Providers/FireflyServiceProvider.php b/app/Providers/FireflyServiceProvider.php index c15d4985cb..7ef6bae2df 100644 --- a/app/Providers/FireflyServiceProvider.php +++ b/app/Providers/FireflyServiceProvider.php @@ -13,6 +13,11 @@ class FireflyServiceProvider extends ServiceProvider return new \FireflyIII\Support\Preferences; } ); + $this->app->bind( + 'navigation', function () { + return new \FireflyIII\Support\Navigation; + } + ); } } \ No newline at end of file diff --git a/app/Support/Facades/Navigation.php b/app/Support/Facades/Navigation.php new file mode 100644 index 0000000000..e0d7e1f797 --- /dev/null +++ b/app/Support/Facades/Navigation.php @@ -0,0 +1,23 @@ + '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); + } + + +} \ No newline at end of file diff --git a/config/app.php b/config/app.php index 2f946b781e..f24472e5ff 100644 --- a/config/app.php +++ b/config/app.php @@ -199,6 +199,7 @@ return [ 'Form' => 'Illuminate\Html\FormFacade', 'Html' => 'Illuminate\Html\HtmlFacade', 'Preferences' => 'FireflyIII\Support\Facades\Preferences', + 'Navigation' => 'FireflyIII\Support\Facades\Navigation', ],