Completed
Push — master ( 82efd5...5f5ed3 )
by
unknown
14s
created

ManiaExchangeWindowFactory::__construct()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 37
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 37
rs 8.8571
ccs 0
cts 15
cp 0
cc 1
eloc 32
nc 1
nop 18
crap 2

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
namespace eXpansion\Bundle\Maps\Plugins\Gui;
4
5
use eXpansion\Bundle\Maps\Plugins\Jukebox;
6
use eXpansion\Bundle\Maps\Plugins\ManiaExchange;
7
use eXpansion\Bundle\Maps\Structure\MxInfo;
8
use eXpansion\Framework\Core\Helpers\Http;
9
use eXpansion\Framework\Core\Helpers\Structures\HttpResult;
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\DataCollectionInterface;
14
use eXpansion\Framework\Core\Model\Gui\Grid\GridBuilderFactory;
15
use eXpansion\Framework\Core\Model\Gui\ManialinkInterface;
16
use eXpansion\Framework\Core\Model\Gui\WindowFactoryContext;
17
use eXpansion\Framework\Core\Plugins\Gui\GridWindowFactory;
18
use eXpansion\Framework\Gui\Components\uiButton;
19
use eXpansion\Framework\Gui\Components\uiDropdown;
20
use eXpansion\Framework\Gui\Components\uiLabel;
21
22
class ManiaExchangeWindowFactory extends GridWindowFactory
23
{
24
    /** @var  uiDropdown */
25
    public $lengthBox;
26
    /** @var  uiDropdown */
27
    public $stylebox;
28
    /** @var  uiDropdown */
29
    public $sitebox;
30
    /** @var  uiDropdown */
31
    public $difficultiesBox;
32
    /** @var  uiDropdown */
33
    public $tpackBox;
34
35
    public $tpack = [
36
        "All" => "",
37
        "Stadium" => "Stadium,TMStadium",
38
        "Canyon" => "Canyon,TmCanyon",
39
        "Valley" => "Valley,TmValley",
40
        "Lagoon" => "Lagoon,TmLagoon",
41
    ];
42
43
    /** @var  uiDropdown */
44
    private $orderbox;
45
    /** @var  uiDropdown */
46
    private $opbox;
47
    /** @var  uiDropdown */
48
    private $modebox;
49
50
    /** @var  array */
51
    private $tracksearch;
52
53
    /** @var GridBuilderFactory */
54
    protected $gridBuilderFactory;
55
56
    /** @var DataCollectionFactory */
57
    protected $dataCollectionFactory;
58
59
    /** @var Time */
60
61
    protected $timeFormatter;
62
    /**
63
     * @var  ManiaExchange $mxPlugin
64
     */
65
    private $mxPlugin;
66
    /**
67
     * @var array
68
     */
69
    private $order;
70
    /**
71
     * @var array
72
     */
73
    private $length;
74
    /**
75
     * @var array
76
     */
77
    private $mapStylesTm;
78
    /**
79
     * @var array
80
     */
81
    private $mapStylesSm;
82
    /**
83
     * @var array
84
     */
85
    private $difficulties;
86
    /**
87
     * @var array
88
     */
89
    private $operator;
90
91
    /**
92
     * @var Http
93
     */
94
    private $http;
95
96
    /**
97
     * ManiaExchangeWindowFactory constructor.
98
     *
99
     * @param $name
100
     * @param $sizeX
101
     * @param $sizeY
102
     * @param null $posX
103
     * @param null $posY
104
     * @param WindowFactoryContext $context
105
     * @param GridBuilderFactory $gridBuilderFactory
106
     * @param DataCollectionFactory $dataCollectionFactory
107
     * @param Time $time
108
     * @param ManiaExchange $mxPlugin
109
     * @param Http $http
110
     * @param $tracksearch
111
     * @param $order
112
     * @param $length
113
     * @param $mapStylesTm
114
     * @param $mapStylesSm
115
     * @param $difficulties
116
     * @param $operator
117
     */
118
    public function __construct(
119
        $name,
120
        $sizeX,
121
        $sizeY,
122
        $posX,
123
        $posY,
124
        WindowFactoryContext $context,
125
        GridBuilderFactory $gridBuilderFactory,
126
        DataCollectionFactory $dataCollectionFactory,
127
        Time $time,
128
        ManiaExchange $mxPlugin,
129
        Http $http,
130
        $tracksearch,
131
        $order,
132
        $length,
133
        $mapStylesTm,
134
        $mapStylesSm,
135
        $difficulties,
136
        $operator
137
138
    ) {
139
        parent::__construct($name, $sizeX, $sizeY, $posX, $posY, $context);
140
141
        $this->gridBuilderFactory = $gridBuilderFactory;
142
        $this->dataCollectionFactory = $dataCollectionFactory;
143
        $this->timeFormatter = $time;
144
        $this->mxPlugin = $mxPlugin;
145
        $this->tracksearch = array_flip($tracksearch);
146
147
        $this->order = array_flip($order);
148
        $this->length = array_flip($length);
149
        $this->mapStylesTm = array_flip($mapStylesTm);
150
        $this->mapStylesSm = array_flip($mapStylesSm);
151
        $this->difficulties = array_flip($difficulties);
152
        $this->operator = array_flip($operator);
153
        $this->http = $http;
154
    }
155
156
    /**
157
     * @param ManialinkInterface $manialink
158
     */
159
    protected function createGrid(ManialinkInterface $manialink)
160
    {
161
        $x = 0;
162
163
        $tooltip = $this->uiFactory->createTooltip();
164
        $manialink->addChild($tooltip);
165
166
        $this->modebox = $this->uiFactory->createDropdown("mode", $this->tracksearch, 0);
167
        $this->modebox->setPosition($x, -6, 2);
168
        $manialink->addChild($this->modebox);
169
170
        $label = $this->uiFactory->createLabel("Sort by", uiLabel::TYPE_HEADER);
171
        $label->setPosition($x, 0);
172
        $manialink->addChild($label);
173
174
        $x += 32;
175
        $this->orderbox = $this->uiFactory->createDropdown("order", $this->order, 0);
176
        $this->orderbox->setPosition($x, -6, 2);
177
        $manialink->addChild($this->orderbox);
178
179
        $label = $this->uiFactory->createLabel("Order", uiLabel::TYPE_HEADER);
180
        $label->setPosition($x, 0);
181
        $manialink->addChild($label);
182
183
        $x += 32;
184
        $this->opbox = $this->uiFactory->createDropdown("operator", $this->operator, 0);
185
        $this->opbox->setPosition($x, -6, 2);
186
        $manialink->addChild($this->opbox);
187
188
        $label = $this->uiFactory->createLabel("Operator", uiLabel::TYPE_HEADER);
189
        $label->setPosition($x, 0);
190
        $manialink->addChild($label);
191
192
        $x += 32;
193
        $this->lengthBox = $this->uiFactory->createDropdown("length", $this->length, 0);
194
        $this->lengthBox->setPosition($x, -6, 2);
195
        $manialink->addChild($this->lengthBox);
196
197
        $label = $this->uiFactory->createLabel("Length", uiLabel::TYPE_HEADER);
198
        $label->setPosition($x, 0);
199
        $manialink->addChild($label);
200
201
        $x += 32;
202
        $this->stylebox = $this->uiFactory->createDropdown("style", $this->mapStylesTm, 0);
203
        $this->stylebox->setPosition($x, -6, 2);
204
        $manialink->addChild($this->stylebox);
205
206
        $label = $this->uiFactory->createLabel("Style", uiLabel::TYPE_HEADER);
207
        $label->setPosition($x, 0);
208
        $manialink->addChild($label);
209
210
        $x += 32;
211
        $this->difficultiesBox = $this->uiFactory->createDropdown("difficulties", $this->difficulties, 0);
212
        $this->difficultiesBox->setPosition($x, -6, 2);
213
        $manialink->addChild($this->difficultiesBox);
214
215
        $label = $this->uiFactory->createLabel("Difficulty", uiLabel::TYPE_HEADER);
216
        $label->setPosition($x, 0);
217
        $manialink->addChild($label);
218
219
        /// second line
220
221
        $this->sitebox = $this->uiFactory->createDropdown("site", ["Trackmania" => "tm", "Storm" => "sm"], 0);
222
        $this->sitebox->setPosition(0, -14, 2);
223
        $manialink->addChild($this->sitebox);
224
225
        $this->tpackBox = $this->uiFactory->createDropdown("tpack", $this->tpack, 0);
226
        $this->tpackBox->setPosition(32, -14, 2);
227
        $manialink->addChild($this->tpackBox);
228
229
        $mapname = $this->uiFactory->createInput("map");
230
        $mapname->setHeight(6);
231
        $author = $this->uiFactory->createInput("author");
232
        $author->setHeight(6);
233
234
        $search = $this->uiFactory->createButton('🔍 Search', uiButton::TYPE_DECORATED);
235
        $search->setAction($this->actionFactory->createManialinkAction($manialink, [$this, 'callbackSearch'],
236
            ["ml" => $manialink]));
237
        $search->setHeight(6);
238
239
        $line = $this->uiFactory->createLayoutLine(64, -14, [$mapname, $author, $search], 2);
240
        $manialink->addChild($line);
241
242
        $addButton = $this->uiFactory->createButton('Install', uiButton::TYPE_DEFAULT);
243
        $addButton->setSize(20, 5);
244
245
        $gridBuilder = $this->gridBuilderFactory->create();
246
        $gridBuilder->setManialink($manialink)
247
            ->setDataCollection($manialink->getData('dataCollection'))
248
            ->setManialinkFactory($this)
249
            ->addTextColumn(
250
                'index',
251
                'expansion_mx.gui.mxsearch.column.index',
252
                1,
253
                true,
254
                false
255
            )->addTextColumn(
256
                'name',
257
                'expansion_mx.gui.mxsearch.column.name',
258
                5,
259
                true,
260
                false
261
            )->addTextColumn(
262
                'author',
263
                'expansion_mx.gui.mxsearch.column.author',
264
                3,
265
                false
266
            )->addTextColumn(
267
                'envir',
268
                'expansion_mx.gui.mxsearch.column.envir',
269
                2,
270
                true,
271
                false
272
            )->addTextColumn(
273
                'awards',
274
                'expansion_mx.gui.mxsearch.column.awards',
275
                1,
276
                true,
277
                false
278
            )->addTextColumn(
279
                'length',
280
                'expansion_mx.gui.mxsearch.column.length',
281
                2,
282
                true,
283
                false
284
            )->addTextColumn(
285
                'style',
286
                'expansion_mx.gui.mxsearch.column.style',
287
                2,
288
                true,
289
                false
290
            )
291
            ->addActionColumn('add', 'expansion_mx.gui.mxsearch.column.add', 2, array($this, 'callbackAdd'),
292
                $addButton);
293
        $this->setGridPosition(0, -24);
294
295
        $content = $manialink->getContentFrame();
296
        $this->setGridSize($content->getWidth(), $content->getHeight() - 24);
297
        $manialink->setData('grid', $gridBuilder);
298
        $this->gridBuilder = $gridBuilder;
299
    }
300
301
    /**
302
     * @param ManialinkInterface $manialink
303
     * @param $login
304
     * @param $params
305
     * @param $args
306
     */
307
    public function callbackAdd(ManialinkInterface $manialink, $login, $params, $args)
308
    {
309
        $this->mxPlugin->addMap($login, $args['mxid'], $params['site']);
310
    }
311
312
    /**
313
     * @param ManialinkInterface $manialink
314
     * @param $login
315
     * @param $params
316
     * @param $arguments
317
     */
318
    public function callbackSearch(ManialinkInterface $manialink, $login, $params, $arguments)
0 ignored issues
show
Unused Code introduced by
The parameter $arguments is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
319
    {
320
        $params = (object)$params;
321
322
        $this->modebox->setSelectedByValue($params->mode);
323
        $this->orderbox->setSelectedByValue($params->order);
324
        $this->opbox->setSelectedByValue($params->operator);
325
        $this->lengthBox->setSelectedByValue($params->length);
326
        $this->stylebox->setSelectedByValue($params->style);
327
        $this->difficultiesBox->setSelectedByValue($params->difficulties);
328
        $this->tpackBox->setSelectedByValue($params->tpack);
329
330
        $options = "";
331
332
        if ($params->tpack) {
333
            $options .= "&tpack=".$params->tpack;
334
        }
335
        if ($params->operator != -1) {
336
            $options .= "&lengthop=".$params->operator;
337
        }
338
339
        $args = "&mode=".$params->mode."&trackname=".urlencode($params->map)."&anyauthor=".urlencode($params->author).
340
            "&style=".$params->style."&priord=".$params->order."&length=".$params->length.
341
            "&limit=100&gv=1".$options;
342
343
        $query = 'https://'.$params->site.'.mania-exchange.com/tracksearch2/search?api=on'.$args;
344
345
        $this->http->get($query, [$this, 'setMaps'], ['login' => $login, 'ml' => $manialink]);
346
347
    }
348
349
350
    /**
351
     * @param HttpResult $result
352
     */
353
    public function setMaps(HttpResult $result)
354
    {
355
        $manialink = $result->getAdditionalData()['ml'];
356
357
        $this->gridBuilder->goToFirstPage($manialink);
358
359
        if ($result->hasError()) {
360
            echo $result->getError();
361
362
            return;
363
        }
364
365
        $json = json_decode($result->getResponse(), true);
366
        $data = [];
367
        foreach ($json['results'] as $idx => $mxInfo) {
368
            $map = new MxInfo($mxInfo);
369
            $data[] = [
370
                "index" => $idx + 1,
371
                "name" => TMString::trimControls($map->GbxMapName),
372
                "author" => $map->Username,
373
                "envir" => $map->EnvironmentName,
374
                "awards" => $map->AwardCount ? '$ff0🏆 $fff'.$map->AwardCount : "",
375
                "length" => $map->LengthName,
376
                "style" => $map->StyleName,
377
                "mxid" => $map->TrackID,
378
            ];
379
        }
380
381
382
        $this->setData($manialink, $data);
383
        $group = $this->groupFactory->createForPlayer($result->getAdditionalData()['login']);
384
        $this->update($group);
385
    }
386
}
387