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

TradeProvider::setTemplateVariables()   A

Complexity

Conditions 5
Paths 9

Size

Total Lines 42
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 30

Importance

Changes 0
Metric Value
cc 5
eloc 30
nc 9
nop 1
dl 0
loc 42
ccs 0
cts 30
cp 0
crap 30
rs 9.1288
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Module\Game\Lib\View\Provider;
6
7
use Stu\Component\Game\GameEnum;
8
use Stu\Component\Trade\TradeEnum;
9
use Stu\Lib\SessionInterface;
10
use Stu\Module\Control\GameControllerInterface;
11
use Stu\Module\Game\Lib\View\Provider\ViewComponentProviderInterface;
12
use Stu\Module\Trade\Lib\TradeOfferItem;
13
use Stu\Module\Trade\Lib\TradeOfferItemInterface;
14
use Stu\Orm\Entity\TradeOfferInterface;
15
use Stu\Orm\Repository\CommodityRepositoryInterface;
16
use Stu\Orm\Repository\TradeLicenseRepositoryInterface;
17
use Stu\Orm\Repository\TradeOfferRepositoryInterface;
18
19
final class TradeProvider implements ViewComponentProviderInterface
20
{
21
    private TradeLicenseRepositoryInterface $tradeLicenseRepository;
22
23
    private TradeOfferRepositoryInterface $tradeOfferRepository;
24
25
    private CommodityRepositoryInterface $commodityRepository;
26
27
    private SessionInterface $session;
28
29
    public function __construct(
30
        TradeLicenseRepositoryInterface $tradeLicenseRepository,
31
        TradeOfferRepositoryInterface $tradeOfferRepository,
32
        CommodityRepositoryInterface $commodityRepository,
33
        SessionInterface $session
34
    ) {
35
        $this->tradeLicenseRepository = $tradeLicenseRepository;
36
        $this->tradeOfferRepository = $tradeOfferRepository;
37
        $this->commodityRepository = $commodityRepository;
38
        $this->session = $session;
39
    }
40
41
    public function setTemplateVariables(GameControllerInterface $game): void
42
    {
43
        $user = $game->getUser();
44
        $userId = $user->getId();
45
46
        $isFilterActive = $game->getViewContext()['FILTER_ACTIVE'] ?? false;
47
48
        $commodityId = null;
49
        $postId = null;
50
        $dir = TradeEnum::FILTER_COMMODITY_IN_BOTH;
51
        if ($isFilterActive) {
52
            if ($this->session->getSessionValue('trade_filter_cid')) {
53
                $commodityId = $this->session->getSessionValue('trade_filter_cid');
54
            }
55
            if ($this->session->getSessionValue('trade_filter_pid')) {
56
                $postId = $this->session->getSessionValue('trade_filter_pid');
57
            }
58
            if ($this->session->getSessionValue('trade_filter_dir')) {
59
                $dir = $this->session->getSessionValue('trade_filter_dir');
60
            }
61
        } else {
62
            $this->session->deleteSessionData('trade_filter_cid');
63
            $this->session->deleteSessionData('trade_filter_pid');
64
            $this->session->deleteSessionData('trade_filter_dir');
65
        }
66
67
        $game->setTemplateVar('COMMODITY_ID', $commodityId ?? 0);
68
        $game->setTemplateVar('POST_ID', $postId ?? 0);
69
70
        $tradeLicenses = $this->tradeLicenseRepository->getLicensesCountbyUser($userId);
71
        $game->setTemplateVar('TRADE_LICENSES', $tradeLicenses);
72
        $game->setTemplateVar('TRADE_LICENSE_COUNT', count($tradeLicenses));
73
74
        $commodityList = $this->commodityRepository->getTradeable();
75
        $game->setTemplateVar('SELECTABLE_COMMODITIES', $commodityList);
76
77
        $game->setTemplateVar('MAX_TRADE_LICENSE_COUNT', GameEnum::MAX_TRADELICENSE_COUNT);
78
        $game->setTemplateVar(
79
            'OFFER_LIST',
80
            array_map(
81
                fn (TradeOfferInterface $tradeOffer): TradeOfferItemInterface => new TradeOfferItem($tradeOffer, $user),
82
                $this->tradeOfferRepository->getByUserLicenses($userId, $commodityId, $postId, $dir)
83
            )
84
        );
85
    }
86
}
87