ArchiveController::yearlyArchive()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 5
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 9
ccs 0
cts 5
cp 0
crap 2
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Blog\Archive;
6
7
use App\Blog\Tag\TagRepository;
8
use Psr\Http\Message\ResponseInterface as Response;
9
use Psr\Http\Message\ServerRequestInterface as Request;
10
use Yiisoft\Data\Paginator\OffsetPaginator;
11
use Yiisoft\Yii\View\ViewRenderer;
12
13
final class ArchiveController
14
{
15
    private const POSTS_PER_PAGE = 3;
16
    private const POPULAR_TAGS_COUNT = 10;
17
    private ViewRenderer $viewRenderer;
18
19
    public function __construct(ViewRenderer $viewRenderer)
20
    {
21
        $this->viewRenderer = $viewRenderer->withControllerName('blog/archive');
22
    }
23
24
    public function index(ArchiveRepository $archiveRepo): Response
25
    {
26
        return $this->viewRenderer->render('index', ['archive' => $archiveRepo->getFullArchive()]);
27
    }
28
29
    public function monthlyArchive(Request $request, TagRepository $tagRepository, ArchiveRepository $archiveRepo): Response
30
    {
31
        $pageNum = (int)$request->getAttribute('page', 1);
32
        $year = (int)$request->getAttribute('year', 0);
33
        $month = (int)$request->getAttribute('month', 0);
34
35
        $dataReader = $archiveRepo->getMonthlyArchive($year, $month);
36
        $paginator = (new OffsetPaginator($dataReader))
37
            ->withPageSize(self::POSTS_PER_PAGE)
38
            ->withCurrentPage($pageNum);
39
40
        $data = [
41
            'year' => $year,
42
            'month' => $month,
43
            'paginator' => $paginator,
44
            'archive' => $archiveRepo->getFullArchive()->withLimit(12),
45
            'tags' => $tagRepository->getTagMentions(self::POPULAR_TAGS_COUNT),
46
        ];
47
        return $this->viewRenderer->render('monthly-archive', $data);
48
    }
49
50
    public function yearlyArchive(Request $request, ArchiveRepository $archiveRepo): Response
51
    {
52
        $year = (int)$request->getAttribute('year', 0);
53
54
        $data = [
55
            'year' => $year,
56
            'items' => $archiveRepo->getYearlyArchive($year),
57
        ];
58
        return $this->viewRenderer->render('yearly-archive', $data);
59
    }
60
}
61