Test Failed
Push — dev ( 55bb00...c2c26e )
by Janko
17:14
created

GameTwigRenderer::render()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 28
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 15
c 1
b 0
f 0
nc 2
nop 3
dl 0
loc 28
rs 9.7666
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
    public function __construct(
29
        ConfigInterface $config,
30
        array $renderFragments
31
    ) {
32
        $this->config = $config;
33
        $this->renderFragments = $renderFragments;
34
    }
35
36
    public function render(
37
        GameControllerInterface $game,
38
        ?UserInterface $user,
39
        TwigPageInterface $twigPage
40
    ): string {
41
        $twigPage->setVar('THIS', $game);
42
        $twigPage->setVar('USER', $user);
43
        $twigPage->setVar('GAME_VERSION', $this->config->get('game.version'));
44
        $twigPage->setVar('WIKI', $this->config->get('wiki.base_url'));
45
        $twigPage->setVar('FORUM', $this->config->get('board.base_url'));
46
        $twigPage->setVar('CHAT', $this->config->get('discord.url'));
47
        $twigPage->setVar(
48
            'ASSET_PATHS',
49
            [
50
                'alliance' => $this->config->get('game.alliance_avatar_path'),
51
                'user' => $this->config->get('game.user_avatar_path'),
52
                'faction' => 'assets/rassen/',
53
            ]
54
        );
55
56
        // render fragments are user related, so render them only if a user is available
57
        if ($user !== null) {
58
            foreach ($this->renderFragments as $renderFragment) {
59
                $renderFragment->render($user, $twigPage);
60
            }
61
        }
62
63
        return $twigPage->render();
64
    }
65
}
66