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

GameTwigRenderer   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Test Coverage

Coverage 7.69%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 39
c 1
b 0
f 0
dl 0
loc 72
ccs 3
cts 39
cp 0.0769
rs 10
wmc 7

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A render() 0 22 3
A setUserVariables() 0 14 2
A setGameVariables() 0 14 1
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