Passed
Push — master ( b965a8...709c0d )
by Nico
49:45 queued 24:59
created

GameTwigRenderer::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 6
ccs 3
cts 3
cp 1
crap 1
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Module\Control\Render;
6
7
use Noodlehaus\ConfigInterface;
8
use Stu\Module\Control\GameControllerInterface;
9
use Stu\Module\Control\Render\Fragments\RenderFragmentInterface;
10
use Stu\Module\Twig\TwigPageInterface;
11
use Stu\Orm\Entity\UserInterface;
12
13
/**
14
 * Executes the render chain for the site template
15
 *
16
 * Also registers a set of default variables for rendering
17
 */
18
final class GameTwigRenderer implements GameTwigRendererInterface
19
{
20
    private ConfigInterface $config;
21
22
    /** @var array<RenderFragmentInterface> */
23
    private array $renderFragments;
24
25
    /**
26
     * @param array<RenderFragmentInterface> $renderFragments
27
     */
28 4
    public function __construct(
29
        ConfigInterface $config,
30
        array $renderFragments
31
    ) {
32 4
        $this->config = $config;
33 4
        $this->renderFragments = $renderFragments;
34
    }
35
36
    public function render(
37
        GameControllerInterface $game,
38
        ?UserInterface $user,
39
        TwigPageInterface $twigPage
40
    ): string {
41
42
        $this->setGameVariables($twigPage, $game);
43
        $this->setUserVariables($user, $twigPage);
44
45
        $twigPage->setVar('GAME_VERSION', $this->config->get('game.version'));
46
        $twigPage->setVar('WIKI', $this->config->get('wiki.base_url'));
47
        $twigPage->setVar('FORUM', $this->config->get('board.base_url'));
48
        $twigPage->setVar('CHAT', $this->config->get('discord.url'));
49
50
        // render fragments are user related, so render them only if a user is available
51
        if ($user !== null) {
52
            foreach ($this->renderFragments as $renderFragment) {
53
                $renderFragment->render($user, $twigPage);
54
            }
55
        }
56
57
        return $twigPage->render();
58
    }
59
60
    private function setGameVariables(TwigPageInterface $twigPage, GameControllerInterface $game): void
61
    {
62
        $twigPage->setVar('NAVIGATION', $game->getNavigation());
63
        $twigPage->setVar('PAGETITLE', $game->getPageTitle());
64
        $twigPage->setVar('INFORMATION', $game->getInformation());
65
        $twigPage->setVar('ACHIEVEMENTS', $game->getAchievements());
66
        $twigPage->setVar('EXECUTEJS', $game->getExecuteJS());
67
        $twigPage->setVar('EXECUTEJSAFTERRENDER', $game->getExecuteJsAfterRender());
68
        $twigPage->setVar('EXECUTEJSAJAXUPDATE', $game->getExecuteJsAjaxUpdate());
69
        $twigPage->setVar('SESSIONSTRING', $game->getSessionString(), true);
70
        $twigPage->setVar('JAVASCRIPTPATH', $game->getJavascriptPath(), true);
71
        $twigPage->setVar('ISADMIN', $game->isAdmin());
72
        $twigPage->setVar('GAMETURN', $game->getCurrentRound()->getTurn());
73
        $twigPage->setVar('BENCHMARK', $game->getBenchmarkResult());
74
    }
75
76
    private function setUserVariables(?UserInterface $user, TwigPageInterface $twigPage): void
77
    {
78
        if ($user === null) {
79
            $twigPage->setVar('USER', null);
80
        } else {
81
            $twigPage->setVar('USER', new UserContainer(
82
                $user->getId(),
83
                $user->getAvatar(),
84
                $user->getName(),
85
                $user->getFactionId(),
86
                $user->getCss(),
87
                $user->getPrestige(),
88
                $user->hasStationsNavigation(),
89
                $user->getDeals()
90
            ));
91
        }
92
    }
93
}
94