Passed
Pull Request — master (#1674)
by Nico
24:49
created

EditSection::handle()   C

Complexity

Conditions 12
Paths 163

Size

Total Lines 78
Code Lines 54

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 156

Importance

Changes 0
Metric Value
cc 12
eloc 54
nc 163
nop 1
dl 0
loc 78
ccs 0
cts 58
cp 0
crap 156
rs 6.4416
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Module\Admin\View\Map\EditSection;
6
7
use RuntimeException;
8
use Stu\Component\Game\GameEnum;
9
use Stu\Component\Map\MapEnum;
10
use Stu\Module\Control\GameControllerInterface;
11
use Stu\Module\Control\ViewControllerInterface;
12
use Stu\Module\Starmap\Lib\StarmapUiFactoryInterface;
13
use Stu\Module\Starmap\View\ShowSection\ShowSectionRequestInterface;
14
use Stu\Orm\Repository\LayerRepositoryInterface;
15
use Stu\Orm\Repository\MapFieldTypeRepositoryInterface;
16
use Stu\Orm\Repository\StarSystemTypeRepositoryInterface;
17
use Stu\Orm\Repository\MapRegionRepositoryInterface;
18
use Stu\Orm\Repository\MapBorderTypeRepositoryInterface;
19
20
final class EditSection implements ViewControllerInterface
21
{
22
    public const VIEW_IDENTIFIER = 'SHOW_EDIT_MAP_SECTION';
23
24
    private ShowSectionRequestInterface $request;
25
26
    private LayerRepositoryInterface $layerRepository;
27
28
    private MapFieldTypeRepositoryInterface $mapFieldTypeRepository;
29
30
    private MapRegionRepositoryInterface $mapRegionRepository;
31
32
    private MapBorderTypeRepositoryInterface $mapBorderTypeRepository;
33
34
    private StarmapUiFactoryInterface $starmapUiFactory;
35
36
    private StarSystemTypeRepositoryInterface $starSystemTypeRepository;
37
38
    public function __construct(
39
        ShowSectionRequestInterface $request,
40
        LayerRepositoryInterface $layerRepository,
41
        StarmapUiFactoryInterface $starmapUiFactory,
42
        MapRegionRepositoryInterface $mapRegionRepository,
43
        MapBorderTypeRepositoryInterface $mapBorderTypeRepository,
44
        MapFieldTypeRepositoryInterface $mapFieldTypeRepository,
45
        StarSystemTypeRepositoryInterface $starSystemTypeRepository
46
    ) {
47
        $this->request = $request;
48
        $this->layerRepository = $layerRepository;
49
        $this->mapFieldTypeRepository = $mapFieldTypeRepository;
50
        $this->starmapUiFactory = $starmapUiFactory;
51
        $this->mapBorderTypeRepository = $mapBorderTypeRepository;
52
        $this->mapRegionRepository = $mapRegionRepository;
53
        $this->starSystemTypeRepository = $starSystemTypeRepository;
54
    }
55
56
    public function handle(GameControllerInterface $game): void
57
    {
58
        $layerId = $this->request->getLayerId();
59
        $layer = $this->layerRepository->find($layerId);
60
        if ($layer === null) {
61
            throw new RuntimeException(sprintf('layerId %d does not exist', $layerId));
62
        }
63
64
        $section_id = $this->request->getSection();
65
66
        $possibleFieldTypes = ['row_0' => [], 'row_1' => [], 'row_2' => [], 'row_3' => [], 'row_4' => [], 'row_5' => []];
67
        foreach ($this->mapFieldTypeRepository->findAll() as $key => $value) {
68
            if ($value->getIsSystem()) {
69
                continue;
70
            }
71
            $possibleFieldTypes['row_' . ($key % 6)][] = $value;
72
        }
73
74
        $possibleSystemTypes = ['row_0' => [], 'row_1' => [], 'row_2' => [], 'row_3' => [], 'row_4' => [], 'row_5' => []];
75
        foreach ($this->starSystemTypeRepository->findAll() as $key => $value) {
76
            if (!$value->getIsGenerateable()) {
77
                continue;
78
            }
79
            $possibleSystemTypes['row_' . ($key % 6)][] = $value;
80
        }
81
82
        $possibleRegion = ['row_0'];
83
        foreach ($this->mapRegionRepository->findAll() as $key => $value) {
84
            if ($value->getId() < 100 && $value->getDatabaseEntry() === null) {
85
                continue;
86
            }
87
            $possibleRegion['row_' . ($key % 1)][] = $value;
88
        }
89
90
        $possibleAdminRegion = ['row_0'];
91
        foreach ($this->mapRegionRepository->findAll() as $key => $value) {
92
            if ($value->getId() >= 100) {
93
                continue;
94
            }
95
            $possibleAdminRegion['row_' . ($key % 1)][] = $value;
96
        }
97
98
        $possibleBorder = ['row_0'];
99
        foreach ($this->mapBorderTypeRepository->findAll() as $key => $value) {
100
            $possibleBorder['row_' . ($key % 1)][] = $value;
101
        }
102
103
        $game->setTemplateFile('html/admin/mapeditor_section.twig', true);
104
        $game->appendNavigationPart('/admin/?SHOW_MAP_EDITOR=1', _('Karteneditor'));
105
        $game->appendNavigationPart(
106
            sprintf(
107
                '/admin/?SHOW_EDIT_MAP_SECTION=1&section=%d&layerid=%d',
108
                $section_id,
109
                $layerId
110
            ),
111
            sprintf(_('Sektion %d anzeigen'), $section_id)
112
        );
113
        $game->setPageTitle(_('Sektion anzeigen'));
114
        $game->setTemplateVar('POSSIBLE_FIELD_TYPES', $possibleFieldTypes);
115
        $game->setTemplateVar('POSSIBLE_SYSTEM_TYPES', $possibleSystemTypes);
116
        $game->setTemplateVar('POSSIBLE_REGION', $possibleRegion);
117
        $game->setTemplateVar('POSSIBLE_BORDER', $possibleBorder);
118
        $game->setTemplateVar('POSSIBLE_ADMIN_REGION', $possibleAdminRegion);
119
        $game->setTemplateVar('FIELDS_PER_SECTION', MapEnum::FIELDS_PER_SECTION);
120
121
        $helper = $this->starmapUiFactory->createMapSectionHelper();
122
        $helper->setTemplateVars(
123
            $game,
124
            $layer,
125
            $section_id,
126
            true,
127
            $this->request->getDirection()
128
        );
129
130
        $game->addExecuteJS(sprintf(
131
            "registerNavKeys('admin/', '%s', '', true);",
132
            self::VIEW_IDENTIFIER
133
        ), GameEnum::JS_EXECUTION_AJAX_UPDATE);
134
    }
135
}
136