Passed
Pull Request — master (#1699)
by Nico
43:19 queued 18:45
created

CommunicationProvider   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 51
dl 0
loc 81
ccs 0
cts 55
cp 0
rs 10
c 0
b 0
f 0
wmc 14

2 Methods

Rating   Name   Duplication   Size   Complexity  
C setTemplateVariables() 0 67 13
A __construct() 0 6 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Module\Game\Lib\View\Provider;
6
7
use request;
8
use Stu\Component\Communication\Kn\KnFactoryInterface;
9
use Stu\Component\Communication\Kn\KnItemInterface;
10
use Stu\Component\Game\GameEnum;
11
use Stu\Module\Control\GameControllerInterface;
12
use Stu\Module\Game\Lib\View\Provider\ViewComponentProviderInterface;
13
use Stu\Orm\Entity\KnPostInterface;
14
use Stu\Orm\Repository\KnPostRepositoryInterface;
15
16
final class CommunicationProvider implements ViewComponentProviderInterface
17
{
18
    private KnPostRepositoryInterface $knPostRepository;
19
20
    private KnFactoryInterface $knFactory;
21
22
    public function __construct(
23
        KnPostRepositoryInterface $knPostRepository,
24
        KnFactoryInterface $knFactory
25
    ) {
26
        $this->knPostRepository = $knPostRepository;
27
        $this->knFactory = $knFactory;
28
    }
29
30
    public function setTemplateVariables(GameControllerInterface $game): void
31
    {
32
        $user = $game->getUser();
33
        $userKnMark = $user->getKNMark();
34
35
        $newKnPostCount = $this->knPostRepository->getAmountSince($userKnMark);
36
        $knPostCount = $this->knPostRepository->getAmount();
37
38
        $mark = $knPostCount;
39
        $lim = floor($mark / GameEnum::KN_PER_SITE) * GameEnum::KN_PER_SITE;
40
        $knStart = $mark % GameEnum::KN_PER_SITE == 0 ? $lim - GameEnum::KN_PER_SITE : $lim;
41
42
        $mark = request::getInt('mark');
43
        if ($mark % GameEnum::KN_PER_SITE != 0 || $mark < 0) {
44
            $mark = 0;
45
        }
46
47
        if (request::getInt('user_mark')) {
48
            $mark = (int) floor($newKnPostCount / GameEnum::KN_PER_SITE) * GameEnum::KN_PER_SITE;
49
        }
50
51
        $maxpage = ceil($knPostCount / GameEnum::KN_PER_SITE);
52
        $curpage = floor($mark / GameEnum::KN_PER_SITE);
53
        $knNavigation = [];
54
        if ($curpage != 0) {
55
            $knNavigation[] = ["page" => "<<", "mark" => 0, "cssclass" => "pages"];
56
            $knNavigation[] = ["page" => "<", "mark" => ($mark - GameEnum::KN_PER_SITE), "cssclass" => "pages"];
57
        }
58
        for ($i = $curpage - 1; $i <= $curpage + 3; $i++) {
59
            if ($i > $maxpage || $i < 1) {
60
                continue;
61
            }
62
            $knNavigation[] = [
63
                "page" => $i,
64
                "mark" => ($i * GameEnum::KN_PER_SITE - GameEnum::KN_PER_SITE),
65
                "cssclass" => ($curpage + 1 === $i ? "pages selected" : "pages")
66
            ];
67
        }
68
        if ($curpage + 1 !== $maxpage) {
69
            $knNavigation[] = ["page" => ">", "mark" => ($mark + GameEnum::KN_PER_SITE), "cssclass" => "pages"];
70
            $knNavigation[] = ["page" => ">>", "mark" => $maxpage * GameEnum::KN_PER_SITE - GameEnum::KN_PER_SITE, "cssclass" => "pages"];
71
        }
72
73
        $markedPostId = request::getInt('markedPost');
74
75
        $game->setTemplateVar(
76
            'KN_POSTINGS',
77
            array_map(
78
                function (KnPostInterface $knPost) use ($user, $markedPostId): KnItemInterface {
79
                    $knItem = $this->knFactory->createKnItem(
80
                        $knPost,
81
                        $user
82
                    );
83
                    if ($markedPostId && $knItem->getId() == $markedPostId) {
84
                        $knItem->setIsHighlighted(true);
85
                    }
86
                    return $knItem;
87
                },
88
                $this->knPostRepository->getBy($mark, GameEnum::KN_PER_SITE)
89
            )
90
        );
91
        $game->setTemplateVar('HAS_NEW_KN_POSTINGS', $this->knPostRepository->getAmountSince($userKnMark));
92
        $game->setTemplateVar('KN_START', $knStart);
93
        $game->setTemplateVar('KN_OFFSET', $mark);
94
        $game->setTemplateVar('NEW_KN_POSTING_COUNT', $newKnPostCount);
95
        $game->setTemplateVar('USER_KN_MARK', $userKnMark);
96
        $game->setTemplateVar('KN_NAVIGATION', $knNavigation);
97
    }
98
}
99