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

TwigHelper   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 161
Duplicated Lines 0 %

Test Coverage

Coverage 70.64%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 87
dl 0
loc 161
ccs 77
cts 109
cp 0.7064
rs 10
c 1
b 0
f 1
wmc 7

5 Methods

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