Passed
Push — master ( 26f240...a6e052 )
by Nico
64:14 queued 29:51
created

ShowBuildplanCreator   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 106
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 73
c 1
b 0
f 0
dl 0
loc 106
ccs 0
cts 71
cp 0
rs 10
wmc 8

2 Methods

Rating   Name   Duplication   Size   Complexity  
B handle() 0 85 7
A __construct() 0 10 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Module\NPC\View\ShowBuildplanCreator;
6
7
use request;
8
use Stu\Component\Ship\ShipModuleTypeEnum;
9
use Stu\Component\Ship\ShipRumpEnum;
0 ignored issues
show
Bug introduced by
The type Stu\Component\Ship\ShipRumpEnum was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
10
use Stu\Module\ShipModule\ModuleSpecialAbilityEnum;
11
use Stu\Module\Control\GameControllerInterface;
12
use Stu\Module\Control\ViewControllerInterface;
13
use Stu\Orm\Repository\ShipRumpRepositoryInterface;
14
use Stu\Orm\Repository\UserRepositoryInterface;
15
use Stu\Orm\Repository\ModuleRepositoryInterface;
16
use Stu\Orm\Repository\ShipRumpModuleLevelRepositoryInterface;
17
18
final class ShowBuildplanCreator implements ViewControllerInterface
19
{
20
    public const VIEW_IDENTIFIER = 'SHOW_BUILDPLAN_CREATOR';
21
22
    private ShipRumpRepositoryInterface $shipRumpRepository;
23
    private UserRepositoryInterface $userRepository;
24
    private ModuleRepositoryInterface $moduleRepository;
25
    private ShipRumpModuleLevelRepositoryInterface $shipRumpModuleLevelRepository;
26
27
    public function __construct(
28
        ShipRumpRepositoryInterface $shipRumpRepository,
29
        UserRepositoryInterface $userRepository,
30
        ModuleRepositoryInterface $moduleRepository,
31
        ShipRumpModuleLevelRepositoryInterface $shipRumpModuleLevelRepository
32
    ) {
33
        $this->shipRumpRepository = $shipRumpRepository;
34
        $this->userRepository = $userRepository;
35
        $this->moduleRepository = $moduleRepository;
36
        $this->shipRumpModuleLevelRepository = $shipRumpModuleLevelRepository;
37
    }
38
39
    public function handle(GameControllerInterface $game): void
40
    {
41
        $userId = request::getInt('userId');
42
        $rumpId = request::getInt('rumpId');
43
44
        $game->setTemplateFile('html/npc/buildplanCreator.twig');
45
        $game->appendNavigationPart('/npc/index.php?SHOW_BUILDPLAN_CREATOR=1', 'Bauplan erstellen');
46
        $game->setPageTitle('Bauplan erstellen');
47
48
        if ($userId > 0) {
49
            $selectedUser = $this->userRepository->find($userId);
50
            $game->setTemplateVar('USER_ID', $userId);
51
            $game->setTemplateVar('SELECTED_USER', $selectedUser);
52
            $game->setTemplateVar('SHIP_RUMPS', $this->shipRumpRepository->getList());
53
54
            if ($rumpId > 0) {
55
                $rump = $this->shipRumpRepository->find($rumpId);
56
                $game->setTemplateVar('RUMP_ID', $rumpId);
57
                $game->setTemplateVar('MODULE_SELECTION', true);
58
59
                $moduleTypes = [
60
                    ShipModuleTypeEnum::HULL,
61
                    ShipModuleTypeEnum::SHIELDS,
62
                    ShipModuleTypeEnum::EPS,
63
                    ShipModuleTypeEnum::IMPULSEDRIVE,
64
                    ShipModuleTypeEnum::REACTOR,
65
                    ShipModuleTypeEnum::COMPUTER,
66
                    ShipModuleTypeEnum::PHASER,
67
                    ShipModuleTypeEnum::TORPEDO,
68
                    ShipModuleTypeEnum::SENSOR
69
                ];
70
71
                if ($rump->getCategoryId() !== ShipRumpEnum::SHIP_CATEGORY_STATION) {
72
                    $moduleTypes[] = ShipModuleTypeEnum::WARPDRIVE;
73
                }
74
75
                $game->setTemplateVar('MODULE_TYPES', $moduleTypes);
76
77
                $mod_level = $this->shipRumpModuleLevelRepository->getByShipRump($rump->getId());
78
79
                $availableModules = [];
80
                foreach ($moduleTypes as $moduleType) {
81
                    $moduleTypeId = $moduleType->value;
82
                    if (
83
                        $mod_level->{'getModuleLevel' . $moduleTypeId}() === 0
84
                        && $mod_level->{'getModuleMandatory' . $moduleTypeId}() === 0
85
                    ) {
86
                        continue;
87
                    }
88
89
                    $min_level = $mod_level->{'getModuleLevel' . $moduleTypeId . 'Min'}();
90
                    $max_level = $mod_level->{'getModuleLevel' . $moduleTypeId . 'Max'}();
91
92
                    $availableModules[$moduleTypeId] = $this->moduleRepository->getByTypeAndLevel(
93
                        $moduleTypeId,
94
                        $rump->getShipRumpRole()->getId(),
95
                        range($min_level, $max_level)
96
                    );
97
                }
98
                $game->setTemplateVar('AVAILABLE_MODULES', $availableModules);
99
100
                $specialModuleTypes = [
101
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_CLOAK,
102
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_RPG,
103
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_TACHYON_SCANNER,
104
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_TROOP_QUARTERS,
105
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_SUBSPACE_FIELD_SENSOR,
106
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_MATRIX_SENSOR,
107
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_ASTRO_LABORATORY,
108
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_TORPEDO_STORAGE,
109
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_SHUTTLE_RAMP,
110
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_TRANSWARP_COIL,
111
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_HIROGEN_TRACKER,
112
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_THOLIAN_WEB,
113
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_BUSSARD_COLLECTOR,
114
                    ModuleSpecialAbilityEnum::MODULE_SPECIAL_AGGREGATION_SYSTEM
115
                ];
116
                $game->setTemplateVar('SPECIAL_MODULES', $this->moduleRepository->getBySpecialTypeIds($specialModuleTypes));
117
            }
118
        } else {
119
            $allUsers = array_merge(
120
                $this->userRepository->getNpcList(),
0 ignored issues
show
Bug introduced by
$this->userRepository->getNpcList() of type iterable is incompatible with the type array expected by parameter $arrays of array_merge(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

120
                /** @scrutinizer ignore-type */ $this->userRepository->getNpcList(),
Loading history...
121
                $this->userRepository->getNonNpcList()
122
            );
123
            $game->setTemplateVar('ALL_USERS', $allUsers);
124
        }
125
    }
126
}