Passed
Push — master ( c00df7...7d9cfb )
by Nico
47:51 queued 23:47
created

TwigHelper::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 5
c 1
b 0
f 1
nc 1
nop 5
dl 0
loc 12
ccs 6
cts 6
cp 1
crap 1
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Module\Twig;
6
7
use JBBCode\Parser;
8
use Noodlehaus\ConfigInterface;
9
use Stu\Component\Colony\ColonyMenuEnum;
10
use Stu\Component\Game\ModuleViewEnum;
11
use Stu\Lib\Colony\PlanetFieldHostInterface;
12
use Stu\Module\Colony\Lib\ColonyEpsProductionPreviewWrapper;
13
use Stu\Module\Colony\Lib\ColonyLibFactoryInterface;
14
use Stu\Module\Colony\Lib\ColonyProductionPreviewWrapper;
15
use Stu\Module\Control\StuTime;
16
use Stu\Module\Ship\Lib\Battle\FightLibInterface;
17
use Stu\Module\Ship\Lib\ShipNfsItem;
18
use Stu\Module\Tal\TalHelper;
19
use Stu\Orm\Entity\AnomalyInterface;
20
use Stu\Orm\Entity\BuildingInterface;
21
use Stu\Orm\Entity\ShipInterface;
22
use Twig\Environment;
23
use Twig\TwigFilter;
24
use Twig\TwigFunction;
25
26
class TwigHelper
27
{
28
    private Environment $environment;
29
30
    private Parser $parser;
31
32
    private ConfigInterface $config;
33
34
    private FightLibInterface $fightLib;
35
36
    private ColonyLibFactoryInterface $colonyLibFactory;
37
38 4
    public function __construct(
39
        Environment $environment,
40
        Parser $parser,
41
        ConfigInterface $config,
42
        FightLibInterface $fightLib,
43
        ColonyLibFactoryInterface $colonyLibFactory
44
    ) {
45 4
        $this->environment = $environment;
46 4
        $this->parser = $parser;
47 4
        $this->config = $config;
48 4
        $this->fightLib = $fightLib;
49 4
        $this->colonyLibFactory = $colonyLibFactory;
50
    }
51
52 4
    public function registerGlobalVariables(): void
53
    {
54 4
        $this->environment->addGlobal(
55 4
            'ASSET_PATHS',
56 4
            [
57 4
                'alliance' => $this->config->get('game.alliance_avatar_path'),
58 4
                'user' => $this->config->get('game.user_avatar_path'),
59 4
                'faction' => 'assets/rassen/',
60 4
            ]
61 4
        );
62
    }
63
64
    /**
65
     * Registers global available twig methods and filters
66
     */
67 4
    public function registerFiltersAndFunctions(): void
68
    {
69 4
        $this->registerFilters();
70 4
        $this->registerFunctions();
71
    }
72
73 4
    private function registerFilters(): void
74
    {
75 4
        $bbcode2txtFilter = new TwigFilter('bbcode2txt', function ($string): string {
76
            return $this->parser->parse($string)->getAsText();
77 4
        });
78 4
        $this->environment->addFilter($bbcode2txtFilter);
79
80 4
        $bbcodeFilter = new TwigFilter('bbcode', function ($string): string {
81
            return $this->parser->parse($string)->getAsHTML();
82 4
        }, ['is_safe' => ['html']]);
83 4
        $this->environment->addFilter($bbcodeFilter);
84
85 4
        $jsquoteFilter = new TwigFilter('jsquote', function ($string): string {
86
            return TalHelper::jsquote($string);
87 4
        });
88 4
        $this->environment->addFilter($jsquoteFilter);
89
90 4
        $addPlusCharacterFilter = new TwigFilter('addPlusCharacter', function ($value): string {
91
            if (is_int($value)) {
92
                return TalHelper::addPlusCharacter((string) $value);
93
            }
94
            return TalHelper::addPlusCharacter($value);
95 4
        });
96 4
        $this->environment->addFilter($addPlusCharacterFilter);
97
98 4
        $formatSecondsFilter = new TwigFilter('formatSeconds', function ($value): string {
99
            if (is_int($value)) {
100
                return TalHelper::formatSeconds((string) $value);
101
            }
102
            return TalHelper::formatSeconds($value);
103 4
        });
104 4
        $this->environment->addFilter($formatSecondsFilter);
105
106 4
        $planetFieldTitleFilter = new TwigFilter('planetFieldTitle', function ($planetField): string {
107
            return TalHelper::getPlanetFieldTitle($planetField);
108 4
        });
109 4
        $this->environment->addFilter($planetFieldTitleFilter);
110
111 4
        $planetFieldTypeDescriptionFilter = new TwigFilter('planetFieldTypeDescription', function ($id): string {
112
            return TalHelper::getPlanetFieldTypeDescription($id);
113 4
        });
114 4
        $this->environment->addFilter($planetFieldTypeDescriptionFilter);
115
116 4
        $formatProductionValueFilter = new TwigFilter('formatProductionValue', function ($value): string {
117
            return TalHelper::formatProductionValue($value);
118 4
        });
119 4
        $this->environment->addFilter($formatProductionValueFilter);
120
121 4
        $isPositiveFilter = new TwigFilter('isPositive', function (int $value): bool {
122
            return $value > 0;
123 4
        });
124 4
        $this->environment->addFilter($isPositiveFilter);
125
126 4
        $stuDateTimeFilter = new TwigFilter('stuDateTime', function ($value): string {
127
            return sprintf(
128
                '%s%s %s',
129
                date('d.m.', $value),
130
                (int)date("Y", $value) + StuTime::STU_YEARS_IN_FUTURE_OFFSET,
131
                date("H:i", $value)
132
            );
133 4
        });
134 4
        $this->environment->addFilter($stuDateTimeFilter);
135
136 4
        $stuDateFilter = new TwigFilter('stuDate', function ($value): string {
137
            return sprintf(
138
                '%s%s',
139
                date('d.m.', $value),
140
                (int)date("Y", $value) + StuTime::STU_YEARS_IN_FUTURE_OFFSET
141
            );
142 4
        });
143 4
        $this->environment->addFilter($stuDateFilter);
144
145 4
        $nl2brFilter = new TwigFilter('nl2br', function (string $value): string {
146
            return nl2br($value);
147 4
        });
148 4
        $this->environment->addFilter($nl2brFilter);
149
150 4
        $htmlSafeFilter = new TwigFilter('htmlSafe', function (string $text): string {
151
            return htmlspecialchars($text);
152 4
        });
153 4
        $this->environment->addFilter($htmlSafeFilter);
154
155 4
        $adventDoorFilter = new TwigFilter('adventDoor', function (AnomalyInterface $anomaly): int {
156
            return (int)((120 - $anomaly->getRemainingTicks()) / 5) + 1;
157 4
        });
158 4
        $this->environment->addFilter($adventDoorFilter);
159
    }
160
161 4
    private function registerFunctions(): void
162
    {
163 4
        $canAttackTargetFunction = new TwigFunction('canAttackTarget', function (ShipInterface $ship, ShipInterface|ShipNfsItem $target): bool {
164
            return $this->fightLib->canAttackTarget($ship, $target);
165 4
        });
166 4
        $this->environment->addFunction($canAttackTargetFunction);
167
168 4
        $getEpsProductionPreviewFunction = new TwigFunction('getEpsProductionPreview', function (PlanetFieldHostInterface $host, BuildingInterface $building): ColonyEpsProductionPreviewWrapper {
169
            return $this->colonyLibFactory->createEpsProductionPreviewWrapper($host, $building);
170 4
        });
171 4
        $this->environment->addFunction($getEpsProductionPreviewFunction);
172
173 4
        $getCommodityProductionPreviewFunction = new TwigFunction('getCommodityProductionPreview', function (PlanetFieldHostInterface $host, BuildingInterface $building): ColonyProductionPreviewWrapper {
174
            return $this->colonyLibFactory->createColonyProductionPreviewWrapper($building, $host);
175 4
        });
176 4
        $this->environment->addFunction($getCommodityProductionPreviewFunction);
177
178 4
        $getColonyMenuClassFunction = new TwigFunction('getColonyMenuClass', function (ColonyMenuEnum $currentMenu, int $value): string {
179
            return ColonyMenuEnum::getMenuClass($currentMenu, $value);
180 4
        });
181 4
        $this->environment->addFunction($getColonyMenuClassFunction);
182
183 4
        $getViewFunction = new TwigFunction('getView', function (string $value): ModuleViewEnum {
184
            return ModuleViewEnum::from($value);
185 4
        });
186 4
        $this->environment->addFunction($getViewFunction);
187
188 4
        $getUniqIdFunction = new TwigFunction('getUniqId', function (): string {
189
            return uniqid();
190 4
        });
191 4
        $this->environment->addFunction($getUniqIdFunction);
192
    }
193
}
194