Passed
Pull Request — master (#1930)
by Janko
14:58 queued 05:13
created

ShowBuildplanCreator::handle()   B

Complexity

Conditions 9
Paths 11

Size

Total Lines 93
Code Lines 68

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 90

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 9
eloc 68
c 1
b 0
f 0
nc 11
nop 1
dl 0
loc 93
ccs 0
cts 70
cp 0
crap 90
rs 7.1426

How to fix   Long Method   

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\NPC\View\ShowBuildplanCreator;
6
7
use Override;
8
use request;
9
use RuntimeException;
10
use Stu\Component\Ship\ShipModuleTypeEnum;
11
use Stu\Component\Ship\ShipRumpEnum;
12
use Stu\Module\ShipModule\ModuleSpecialAbilityEnum;
13
use Stu\Module\Control\GameControllerInterface;
14
use Stu\Module\Control\ViewControllerInterface;
15
use Stu\Orm\Repository\ShipRumpRepositoryInterface;
16
use Stu\Orm\Repository\UserRepositoryInterface;
17
use Stu\Orm\Repository\ModuleRepositoryInterface;
18
use Stu\Orm\Repository\ShipRumpModuleLevelRepositoryInterface;
19
20
final class ShowBuildplanCreator implements ViewControllerInterface
21
{
22
    public const string VIEW_IDENTIFIER = 'SHOW_BUILDPLAN_CREATOR';
0 ignored issues
show
Bug introduced by
A parse error occurred: Syntax error, unexpected T_STRING, expecting '=' on line 22 at column 24
Loading history...
23
24
    public function __construct(
25
        private ShipRumpRepositoryInterface $shipRumpRepository,
26
        private UserRepositoryInterface $userRepository,
27
        private ModuleRepositoryInterface $moduleRepository,
28
        private ShipRumpModuleLevelRepositoryInterface $shipRumpModuleLevelRepository
29
    ) {}
30
31
    #[Override]
32
    public function handle(GameControllerInterface $game): void
33
    {
34
        $userId = request::getInt('userId');
35
        $rumpId = request::getInt('rumpId');
36
37
        $game->setTemplateFile('html/npc/buildplanCreator.twig');
38
        $game->appendNavigationPart('/npc/index.php?SHOW_BUILDPLAN_CREATOR=1', 'Bauplan erstellen');
39
        $game->setPageTitle('Bauplan erstellen');
40
41
        if ($userId > 0) {
42
            $selectedUser = $this->userRepository->find($userId);
43
            $game->setTemplateVar('USER_ID', $userId);
44
            $game->setTemplateVar('SELECTED_USER', $selectedUser);
45
            $game->setTemplateVar('SHIP_RUMPS', $this->shipRumpRepository->getList());
46
47
            if ($rumpId > 0) {
48
                $rump = $this->shipRumpRepository->find($rumpId);
49
                if ($rump === null) {
50
                    throw new RuntimeException(sprintf('rumpId %d does not exist', $rumpId));
51
                }
52
53
                $game->setTemplateVar('RUMP_ID', $rumpId);
54
                $game->setTemplateVar('MODULE_SELECTION', true);
55
56
                $moduleTypes = [
57
                    ShipModuleTypeEnum::HULL,
58
                    ShipModuleTypeEnum::SHIELDS,
59
                    ShipModuleTypeEnum::EPS,
60
                    ShipModuleTypeEnum::IMPULSEDRIVE,
61
                    ShipModuleTypeEnum::REACTOR,
62
                    ShipModuleTypeEnum::COMPUTER,
63
                    ShipModuleTypeEnum::PHASER,
64
                    ShipModuleTypeEnum::TORPEDO,
65
                    ShipModuleTypeEnum::SENSOR
66
                ];
67
68
                if ($rump->getCategoryId() !== ShipRumpEnum::SHIP_CATEGORY_STATION) {
69
                    $moduleTypes[] = ShipModuleTypeEnum::WARPDRIVE;
70
                }
71
72
                $game->setTemplateVar('MODULE_TYPES', $moduleTypes);
73
74
                $mod_level = $this->shipRumpModuleLevelRepository->getByShipRump($rump->getId());
75
76
                $availableModules = [];
77
                foreach ($moduleTypes as $moduleType) {
78
                    $moduleTypeId = $moduleType->value;
79
                    if (
80
                        $mod_level->{'getModuleLevel' . $moduleTypeId}() === 0
81
                        && $mod_level->{'getModuleMandatory' . $moduleTypeId}() === 0
82
                    ) {
83
                        continue;
84
                    }
85
86
                    $min_level = $mod_level->{'getModuleLevel' . $moduleTypeId . 'Min'}();
87
                    $max_level = $mod_level->{'getModuleLevel' . $moduleTypeId . 'Max'}();
88
89
                    $shipRumpRole = $rump->getShipRumpRole();
90
                    if ($shipRumpRole === null) {
91
                        throw new RuntimeException(sprintf('No ship rump role found for rump %d', $rump->getId()));
92
                    }
93
94
                    $availableModules[$moduleTypeId] = $this->moduleRepository->getByTypeAndLevel(
95
                        $moduleTypeId,
96
                        $shipRumpRole->getId(),
97
                        range($min_level, $max_level)
98
                    );
99
                }
100
                $game->setTemplateVar('AVAILABLE_MODULES', $availableModules);
101
102
                $specialModuleTypes = [
103
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_CLOAK,
104
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_RPG,
105
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_TACHYON_SCANNER,
106
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_TROOP_QUARTERS,
107
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_SUBSPACE_FIELD_SENSOR,
108
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_MATRIX_SENSOR,
109
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_ASTRO_LABORATORY,
110
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_TORPEDO_STORAGE,
111
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_SHUTTLE_RAMP,
112
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_TRANSWARP_COIL,
113
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_HIROGEN_TRACKER,
114
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_THOLIAN_WEB,
115
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_BUSSARD_COLLECTOR,
116
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_AGGREGATION_SYSTEM
117
                ];
118
                $game->setTemplateVar('SPECIAL_MODULES', $this->moduleRepository->getBySpecialTypeIds($specialModuleTypes));
119
            }
120
        } else {
121
            $npcList = iterator_to_array($this->userRepository->getNpcList());
122
            $nonNpcList = iterator_to_array($this->userRepository->getNonNpcList());
123
            $allUsers = array_merge($npcList, $nonNpcList);
124
            $game->setTemplateVar('ALL_USERS', $allUsers);
125
        }
126
    }
127
}
128