MapsWindowFactory   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 153
Duplicated Lines 15.03 %

Coupling/Cohesion

Components 3
Dependencies 9

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 7
lcom 3
cbo 9
dl 23
loc 153
ccs 0
cts 90
cp 0
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 23 23 1
A callbackRemove() 0 4 1
A callbackWish() 0 4 1
A setMaps() 0 20 2
A createGrid() 0 54 2

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
4
namespace eXpansion\Bundle\Maps\Plugins\Gui;
5
6
7
use eXpansion\Bundle\Maps\Plugins\Jukebox;
8
use eXpansion\Bundle\Maps\Plugins\Maps;
9
use eXpansion\Framework\AdminGroups\Helpers\AdminGroups;
10
use eXpansion\Framework\Core\Helpers\Time;
11
use eXpansion\Framework\Core\Helpers\TMString;
12
use eXpansion\Framework\Core\Model\Gui\Grid\DataCollectionFactory;
13
use eXpansion\Framework\Core\Model\Gui\Grid\GridBuilderFactory;
14
use eXpansion\Framework\Core\Model\Gui\ManialinkInterface;
15
use eXpansion\Framework\Core\Model\Gui\WindowFactoryContext;
16
use eXpansion\Framework\Core\Plugins\Gui\GridWindowFactory;
17
use eXpansion\Framework\Gui\Components\Button;
18
use Maniaplanet\DedicatedServer\Structures\Map;
19
20
21
/**
22
 * Class RecordsWindowFactory
23
 *
24
 * @package eXpansion\Bundle\LocalRecords\Plugins\Gui;
25
 * @author  reaby
26
 */
27
class MapsWindowFactory extends GridWindowFactory
28
{
29
    /** @var GridBuilderFactory */
30
    protected $gridBuilderFactory;
31
32
    /** @var DataCollectionFactory */
33
    protected $dataCollectionFactory;
34
35
    /** @var Time */
36
    protected $timeFormatter;
37
    /**
38
     * @var Jukebox
39
     */
40
    private $jukeboxPlugin;
41
    /**
42
     * @var AdminGroups
43
     */
44
    private $adminGroups;
45
    /**
46
     * @var Maps
47
     */
48
    private $mapsPlugin;
49
50
    /**
51
     * MapsWindowFactory constructor.
52
     * @param $name
53
     * @param $sizeX
54
     * @param $sizeY
55
     * @param null $posX
56
     * @param null $posY
57
     * @param WindowFactoryContext $context
58
     * @param GridBuilderFactory $gridBuilderFactory
59
     * @param DataCollectionFactory $dataCollectionFactory
60
     * @param Time $time
61
     * @param Jukebox $jukeboxPlugin
62
     * @param Maps $mapsPlugin
63
     * @param AdminGroups $adminGroups
64
     */
65 View Code Duplication
    public function __construct(
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
66
        $name,
67
        $sizeX,
68
        $sizeY,
69
        $posX,
70
        $posY,
71
        WindowFactoryContext $context,
72
        GridBuilderFactory $gridBuilderFactory,
73
        DataCollectionFactory $dataCollectionFactory,
74
        Time $time,
75
        Jukebox $jukeboxPlugin,
76
        Maps $mapsPlugin,
77
        AdminGroups $adminGroups
78
    ) {
79
        parent::__construct($name, $sizeX, $sizeY, $posX, $posY, $context);
80
81
        $this->gridBuilderFactory = $gridBuilderFactory;
82
        $this->dataCollectionFactory = $dataCollectionFactory;
83
        $this->timeFormatter = $time;
84
        $this->jukeboxPlugin = $jukeboxPlugin;
85
        $this->adminGroups = $adminGroups;
86
        $this->mapsPlugin = $mapsPlugin;
87
    }
88
89
    public function callbackRemove(ManialinkInterface $manialink, $login, $params, $args)
90
    {
91
        $this->mapsPlugin->removeMap($login, $args['wish']->uId);
92
    }
93
94
    public function callbackWish(ManialinkInterface $manialink, $login, $params, $args)
95
    {
96
        $this->jukeboxPlugin->add($login, $args['wish']->uId);
97
    }
98
99
    public function setMaps($maps)
100
    {
101
        $this->genericData = [];
102
103
        /**
104
         * @var string $i
105
         * @var Map $map
106
         */
107
        $i = 1;
108
        foreach ($maps as $uid => $map) {
109
            $this->genericData[] = [
110
                'index' => $i++,
111
                'name' => TMString::trimControls($map->name),
112
                'author' => $map->author,
113
                'time' => $this->timeFormatter->timeToText($map->goldTime, true),
114
                'wish' => $map
115
            ];
116
        }
117
118
    }
119
120
    /**
121
     * @param ManialinkInterface $manialink
122
     * @return void
123
     */
124
    protected function createGrid(ManialinkInterface $manialink)
125
    {
126
        $this->setData($manialink, $this->genericData);
127
128
        $tooltip = $this->uiFactory->createTooltip();
129
        $manialink->addChild($tooltip);
130
131
        $queueButton = $this->uiFactory->createButton('+', Button::TYPE_DECORATED);
132
        $queueButton->setTextColor("fff")->setSize(5, 5);
133
        $tooltip->addTooltip($queueButton, 'Adds map to jukebox');
134
135
        $removeButton = $this->uiFactory->createButton('x', Button::TYPE_DECORATED);
136
        $removeButton->setBorderColor("f00")->setTextColor("fff")->setSize(5, 5);
137
        $tooltip->addTooltip($removeButton, 'Removes map from playlist');
138
139
        $gridBuilder = $this->gridBuilderFactory->create();
140
        $gridBuilder->setManialink($manialink)
141
            ->setDataCollection($manialink->getData('dataCollection'))
142
            ->setManialinkFactory($this)
143
            ->addTextColumn(
144
                'index',
145
                'expansion_maps.gui.window.column.index',
146
                1,
147
                true,
148
                false
149
            )->addTextColumn(
150
                'name',
151
                'expansion_maps.gui.window.column.name',
152
                5,
153
                true,
154
                false
155
            )->addTextColumn(
156
                'author',
157
                'expansion_maps.gui.window.column.author',
158
                3,
159
                false
160
            )->addTextColumn(
161
                'time',
162
                'expansion_maps.gui.window.column.goldtime',
163
                2,
164
                true,
165
                false
166
167
            )->addActionColumn('wish', 'expansion_maps.gui.window.column.wish', 1,
168
                [$this, 'callbackWish'], $queueButton);
169
170
        if ($this->adminGroups->hasPermission($manialink->getUserGroup(), "admin")) {
171
            $gridBuilder->addActionColumn('index', 'expansion_maps.gui.window.column.remove',
172
                1, [$this, 'callbackRemove'], $removeButton);
173
        }
174
175
        $manialink->setData('grid', $gridBuilder);
176
177
    }
178
179
}
180