toby/app/Eloquent/Helpers/YearPeriodRetriever.php
Krzysztof Rewak f6d59f8bfb
- directory refactor (#32)
* - directory refactor

* - readme.md update

* Update readme.md

Co-authored-by: Adrian Hopek <adrian.hopek@blumilk.pl>

* Update readme.md

Co-authored-by: Ewelina Lasowy <56546832+EwelinaLasowy@users.noreply.github.com>

* Update readme.md

Co-authored-by: Ewelina Lasowy <56546832+EwelinaLasowy@users.noreply.github.com>

* Update readme.md

Co-authored-by: Ewelina Lasowy <56546832+EwelinaLasowy@users.noreply.github.com>

* Update readme.md

Co-authored-by: Adrian Hopek <adrian.hopek@blumilk.pl>
Co-authored-by: Ewelina Lasowy <56546832+EwelinaLasowy@users.noreply.github.com>
2022-01-26 12:31:26 +01:00

58 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
namespace Toby\Eloquent\Helpers;
use Illuminate\Contracts\Session\Session;
use Toby\Eloquent\Models\YearPeriod;
class YearPeriodRetriever
{
public const SESSION_KEY = "selected_year_period";
public function __construct(
protected Session $session,
) {
}
public function selected(): YearPeriod
{
/** @var YearPeriod $yearPeriod */
$yearPeriod = YearPeriod::query()->find($this->session->get(static::SESSION_KEY));
return $yearPeriod !== null ? $yearPeriod : $this->current();
}
public function current(): YearPeriod
{
return YearPeriod::current();
}
public function links(): array
{
$current = $this->selected();
$years = YearPeriod::query()->whereIn("year", $this->offset($current->year))->get();
$navigation = $years->map(fn(YearPeriod $yearPeriod) => $this->toNavigation($yearPeriod));
return [
"current" => $current->year,
"navigation" => $navigation->toArray(),
];
}
protected function offset(int $year): array
{
return range($year - 2, $year + 2);
}
protected function toNavigation(YearPeriod $yearPeriod): array
{
return [
"year" => $yearPeriod->year,
"link" => route("year-periods.select", $yearPeriod->id),
];
}
}