Issues (213)

src/views/server/view.php (2 issues)

1
<?php
2
3
use hipanel\helpers\Url;
4
use hipanel\modules\server\assets\ServerTaskCheckerAsset;
5
use hipanel\modules\server\grid\BindingColumn;
6
use hipanel\modules\server\grid\ServerGridView;
7
use hipanel\modules\server\menus\ServerDetailMenu;
8
use hipanel\modules\server\models\Server;
9
use hipanel\modules\server\widgets\BootLive;
10
use hipanel\modules\server\widgets\ChartOptions;
11
use hipanel\modules\server\widgets\ResourceConsumptionTable;
12
use hipanel\modules\server\widgets\ServerSwitcher;
13
use hipanel\modules\server\widgets\Wizzard;
14
use hipanel\widgets\Box;
15
use hipanel\widgets\ClientSellerLink;
16
use hipanel\widgets\EventLog;
17
use hipanel\widgets\Pjax;
18
use hipanel\widgets\SettingsModal;
19
use hipanel\widgets\SimpleOperation;
20
use yii\helpers\Html;
21
use yii\helpers\Json;
22
use yii\web\View;
23
use yii\widgets\DetailView;
24
25
/**
26
 * @var View $this
27
 * @var Server $model
28
 */
29
$this->title = $model->name;
30
$this->params['subtitle'] = Yii::t('hipanel:server', 'Server detailed information') . ' #' . $model->id;
31
$this->params['breadcrumbs'][] = ['label' => Yii::t('hipanel:server', 'Servers'), 'url' => ['index']];
32
$this->params['breadcrumbs'][] = $this->title;
33
34
list($chartsLabels, $chartsData) = $model->groupUsesForCharts();
35
36
?>
37
    <div class="row server-view">
38
        <div class="col-md-3">
39
            <?= ServerSwitcher::widget(['model' => $model]) ?>
40
41
            <?php Box::begin([
42
                'bodyOptions' => [
43
                    'class' => 'no-padding',
44
                ],
45
            ]) ?>
46
            <div class="profile-user-img text-center">
47
                <i class="fa fa-server fa-5x"></i>
48
            </div>
49
            <p class="text-center">
50
                <span class="profile-user-role"><?= $model->name ?></span>
51
                <br>
52
                <span class="profile-user-name"><?= ClientSellerLink::widget(['model' => $model]) ?></span>
53
            </p>
54
            <?php Pjax::begin(['enablePushState' => false]) ?>
55
            <div class="profile-usermenu">
56
                <?= ServerDetailMenu::widget(['model' => $model, 'blockReasons' => $blockReasons]) ?>
57
            </div>
58
            <?php Pjax::end() ?>
59
            <?php Box::end() ?>
60
61
            <?php if ($model->isVNCSupported() && Yii::$app->user->can('server.control-system')) : ?>
62
                <div class="row">
63
                    <div class="col-md-12">
64
                        <?php
65
                        $box = Box::begin(['renderBody' => false]);
66
                        $box->beginHeader();
67
                            echo $box->renderTitle(Yii::t('hipanel:server', 'VNC server'));
68
                        $box->endHeader();
69
                        $box->beginBody();
70
                            echo $this->render('_vnc', compact(['model']));
71
                        $box->endBody();
72
                        $box->end();
73
                        ?>
74
                    </div>
75
                </div>
76
            <?php endif ?>
77
            <?php if ($model->canControlPower()) : ?>
78
                <div class="row">
79
                    <div class="col-md-12">
80
                        <?php
81
                        $box = Box::begin(['renderBody' => false]);
82
                        $box->beginHeader();
83
                            echo $box->renderTitle(Yii::t('hipanel:server', 'System management'));
84
                        $box->endHeader();
85
                        $box->beginBody() ?>
86
                        <div class="row">
87
                            <?php if (Yii::$app->user->can('server.control-power')) : ?>
88
                                <div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
89
                                    <?= SimpleOperation::widget([
90
                                        'model' => $model,
91
                                        'scenario' => 'reboot',
92
                                        'buttonLabel' => Yii::t('hipanel:server', 'Reboot'),
93
                                        'body' => '<div class="callout callout-warning">
94
    <h4>' . Yii::t('hipanel:server', 'This may cause data loose!') . '</h4>
95
</div>
96
<p>' . Yii::t('hipanel:server', 'Reboot will interrupt all processes on the server. Are you sure you want to reset the server?') . '</p>',
97
                                        'modalHeaderLabel' => Yii::t('hipanel:server', 'Confirm server reboot'),
98
                                        'modalHeaderOptions' => ['class' => 'label-warning'],
99
                                        'modalFooterLabel' => Yii::t('hipanel:server', 'Reboot'),
100
                                        'modalFooterLoading' => Yii::t('hipanel:server', 'Rebooting...'),
101
                                        'modalFooterClass' => 'btn btn-warning',
102
                                    ]) ?>
103
                                </div>
104
105
                                <div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
106
                                    <?= SimpleOperation::widget([
107
                                        'model' => $model,
108
                                        'scenario' => 'shutdown',
109
                                        'buttonLabel' => Yii::t('hipanel:server', 'Shutdown'),
110
                                        'body' => '<div class="callout callout-warning">
111
    <h4>' . Yii::t('hipanel:server', 'This may cause data loose!') . '</h4>
112
</div>
113
<p>' . Yii::t('hipanel:server', 'Shutdown will interrupt all processes on the server. Are you sure you want to shutdown the server?') . '</p>',
114
                                        'modalHeaderLabel' => Yii::t('hipanel:server', 'Confirm server shutdown'),
115
                                        'modalHeaderOptions' => ['class' => 'label-warning'],
116
                                        'modalFooterLabel' => Yii::t('hipanel:server', 'Shutdown'),
117
                                        'modalFooterLoading' => Yii::t('hipanel:server', 'Shutting down...'),
118
                                        'modalFooterClass' => 'btn btn-warning',
119
                                    ]) ?>
120
                                </div>
121
                            <?php endif ?>
122
                            <?php if ($model->isLiveCDSupported() && Yii::$app->user->can('server.control-system')) : ?>
123
                                <div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
124
                                    <?= BootLive::widget([
125
                                        'model' => $model,
126
                                        'osimageslivecd' => $osimageslivecd,
127
                                    ]) ?>
128
                                </div>
129
                            <?php endif ?>
130
                            <?php if ($model->isVirtualDevice() && Yii::$app->user->can('server.control-system')) : ?>
131
                                <div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
132
                                    <?= $this->render('_reinstall', compact(['model', 'groupedOsimages', 'panels'])) ?>
133
                                </div>
134
                            <?php endif ?>
135
                            <?php if (Yii::$app->user->can('server.wizzard')) : ?>
136
                                <div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
137
                                    <?= Wizzard::widget(compact(['model'])) ?>
138
                                </div>
139
                            <?php endif ?>
140
                        </div>
141
                        <?php
142
                        $box->endBody();
143
                        $box->end();
144
                        ?>
145
                    </div>
146
                </div>
147
            <?php endif ?>
148
            <?php if ($model->isVirtualDevice() && Yii::$app->user->can('server.control-power')) : ?>
149
                <div class="row">
150
                    <div class="col-md-12">
151
                        <?php
152
                        $box = Box::begin(['renderBody' => false]);
153
                        $box->beginHeader();
154
                        echo $box->renderTitle(Yii::t('hipanel:server', 'Power management'));
155
                        $box->endHeader();
156
                        $box->beginBody(); ?>
157
                        <div class="row">
158
                            <div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
159
                                <?= SimpleOperation::widget([
160
                                    'model' => $model,
161
                                    'scenario' => 'power-on',
162
                                    'buttonLabel' => Yii::t('hipanel:server', 'Power on'),
163
                                    'body' => Yii::t('hipanel:server', 'Turn ON server power?'),
164
                                    'modalHeaderLabel' => Yii::t('hipanel:server', 'Confirm server power ON'),
165
                                    'modalHeaderOptions' => ['class' => 'label-info'],
166
                                    'modalFooterLabel' => Yii::t('hipanel:server', 'Power ON'),
167
                                    'modalFooterLoading' => Yii::t('hipanel:server', 'Turning power ON...'),
168
                                    'modalFooterClass' => 'btn btn-info',
169
                                ]) ?>
170
                            </div>
171
                            <div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
172
                                <?= SimpleOperation::widget([
173
                                    'model' => $model,
174
                                    'scenario' => 'power-off',
175
                                    'buttonLabel' => Yii::t('hipanel:server', 'Power off'),
176
                                    'body' => '<div class="callout callout-warning">
177
    <h4>' . Yii::t('hipanel:server', 'This may cause data loose!') . '</h4>
178
</div>
179
<p>' . Yii::t('hipanel:server', 'Power off will immediately interrupt all processes on the server in a dangerous way. Always try to shutdown it, before turning off the power. Are you sure you want to power off the server?') . '</p>',
180
                                    'modalHeaderLabel' => Yii::t('hipanel:server', 'Confirm server shutdown'),
181
                                    'modalHeaderOptions' => ['class' => 'label-warning'],
182
                                    'modalFooterLabel' => Yii::t('hipanel:server', 'Power OFF'),
183
                                    'modalFooterLoading' => Yii::t('hipanel:server', 'Turning power OFF...'),
184
                                    'modalFooterClass' => 'btn btn-warning',
185
                                ]) ?>
186
                            </div>
187
                            <div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
188
                                <?= SimpleOperation::widget([
189
                                    'model' => $model,
190
                                    'scenario' => 'reset',
191
                                    'buttonLabel' => Yii::t('hipanel:server', 'Reset'),
192
                                    'body' => '<div class="callout callout-warning">
193
    <h4>' . Yii::t('hipanel:server', 'This may cause data loose!') . '</h4>
194
</div>
195
<p>' . Yii::t('hipanel:server', 'Power reset will interrupt all processes on the server in a dangerous way. Always try to reboot it, before resetting. Are you sure you want to reset power of the server?') . '</p>',
196
                                    'modalHeaderLabel' => Yii::t('hipanel:server', 'Confirm server power reset'),
197
                                    'modalHeaderOptions' => ['class' => 'label-warning'],
198
                                    'modalFooterLabel' => Yii::t('hipanel:server', 'Reset power'),
199
                                    'modalFooterLoading' => Yii::t('hipanel:server', 'Resetting power...'),
200
                                    'modalFooterClass' => 'btn btn-warning',
201
                                ]) ?>
202
                            </div>
203
                        </div>
204
                        <?php $box->endBody(); $box->end(); ?>
205
                    </div>
206
                </div>
207
            <?php endif ?>
208
            <div class="row">
209
                <div class="col-md-12">
210
                    <?php
211
                    $box = Box::begin(['renderBody' => false]);
212
                    $box->beginHeader();
213
                        echo $box->renderTitle(Yii::t('hipanel:server', 'Event log'));
214
                    $box->endHeader();
215
                    $box->beginBody();
216
                        echo EventLog::widget([
217
                            'statuses' => $model->statuses,
218
                        ]);
219
                    $box->endBody();
220
                    $box->end();
221
                    ?>
222
                </div>
223
            </div>
224
        </div>
225
        <div class="col-md-4">
226
            <div class="row">
227
                <div class="col-md-12">
228
                    <?php
229
                    $box = Box::begin(['renderBody' => false]);
230
                    $box->beginHeader();
231
                        echo $box->renderTitle(Yii::t('hipanel:server', 'Server information'));
232
                    $box->endHeader();
233
                    $box->beginBody();
234
                        echo ServerGridView::detailView([
235
                            'boxed'   => false,
236
                            'model'   => $model,
237
                            'gridOptions' => [
238
                                'osImages' => $osimages,
239
                            ],
240
                            'columns' => [
241
                                'client_id', 'seller_id',
242
                                [
243
                                    'attribute' => 'name',
244
                                    'contentOptions' => ['class' => 'text-bold'],
245
                                ], 'detailed_type',
246
                                'ip', 'note', 'label',
247
                                'blocking',
248
                                'mails_num',
249
                            ],
250
                        ]);
251
                        if (!empty($model->softwareSettings->failure_contacts)) {
252
                            echo '<hr>';
253
                            echo DetailView::widget([
254
                                'model' => $model->softwareSettings,
255
                                'attributes' => ['failure_contacts'],
256
                            ]);
257
                        }
258
                    $box->endBody();
259
                    $box->end();
260
                    ?>
261
                </div>
262
            </div>
263
            <div class="row">
264
                <?php Pjax::begin(['enablePushState' => false]) ?>
265
                <div class="col-md-12">
266
                    <?php
267
                    $box = Box::begin(['renderBody' => false]);
268
                    $box->beginHeader();
269
                        echo $box->renderTitle(Yii::t('hipanel:server', 'Financial information'));
270
                    $box->endHeader();
271
                    $box->beginBody();
272
                        echo ServerGridView::detailView([
273
                            'boxed'   => false,
274
                            'model'   => $model,
275
                            'columns' => [
276
                                'tariff', 'sale_time',
277
                            ],
278
                        ]);
279
                    $box->endBody();
280
                    $box->beginFooter();
281
                        if ($model->autorenewal && $model->expires && Yii::$app->user->can('DISABLED:server.pay')) {
282
                            echo SimpleOperation::widget([
283
                                'model' => $model,
284
                                'scenario' => 'refuse',
285
                                'buttonLabel' => Yii::t('hipanel:server', 'Refuse service'),
286
                                'buttonClass' => 'btn btn-default',
287
                                'body' => function ($model) {
288
                                    return $model->canFullRefuse()
289
                                        ? Yii::t('hipanel:server', 'In case of service refusing, the server will be locked and turned off. All data on the server will be removed!')
290
                                        : Yii::t('hipanel:server', 'In case of service refusing, the server will be locked and turned off {0, date, medium}. All data on the server will be removed!', Yii::$app->formatter->asTimestamp($model->expires));
0 ignored issues
show
Yii::app->formatter->asTimestamp($model->expires) of type string is incompatible with the type array expected by parameter $params of yii\BaseYii::t(). ( Ignorable by Annotation )

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

290
                                        : Yii::t('hipanel:server', 'In case of service refusing, the server will be locked and turned off {0, date, medium}. All data on the server will be removed!', /** @scrutinizer ignore-type */ Yii::$app->formatter->asTimestamp($model->expires));
Loading history...
291
                                },
292
                                'modalHeaderLabel' => Yii::t('hipanel:server', 'Confirm service refuse'),
293
                                'modalHeaderOptions' => ['class' => 'label-danger'],
294
                                'modalFooterLabel' => Yii::t('hipanel:server', 'Refuse'),
295
                                'modalFooterLoading' => Yii::t('hipanel:server', 'Refusing...'),
296
                                'modalFooterClass' => 'btn btn-warning',
297
                            ]);
298
                        } elseif (in_array($model->state, $model->goodStates(), true) && $model->expires && Yii::$app->user->can('server.pay') && Yii::$app->params['module.server.renew.allowed']) {
299
                            echo SimpleOperation::widget([
300
                                'model' => $model,
301
                                'scenario' => 'enable-autorenewal',
302
                                'buttonLabel' => Yii::t('hipanel:server', 'Renew service'),
303
                                'buttonClass' => 'btn btn-default',
304
                                'body' => function ($model) {
0 ignored issues
show
The parameter $model is not used and could be removed. ( Ignorable by Annotation )

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

304
                                'body' => function (/** @scrutinizer ignore-unused */ $model) {

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

Loading history...
305
                                    return Yii::t('hipanel:server', 'Are you sure, you want to renew the service?');
306
                                },
307
                                'modalHeaderLabel' => Yii::t('hipanel:server', 'Confirm service renewal'),
308
                                'modalHeaderOptions' => ['class' => 'label-info'],
309
                                'modalFooterLabel' => Yii::t('hipanel:server', 'Renew'),
310
                                'modalFooterLoading' => Yii::t('hipanel:server', 'Renewing...'),
311
                                'modalFooterClass' => 'btn btn-info',
312
                            ]);
313
                        }
314
                        if (Yii::$app->user->can('server.sell')) {
315
                            echo SettingsModal::widget([
316
                                'model'    => $model,
317
                                'title'    => Yii::t('hipanel:server', 'Change tariff'),
318
                                'scenario' => 'bulk-sale',
319
                                'toggleButton' => [
320
                                    'class' => 'btn btn-default',
321
                                ],
322
                            ]);
323
                        }
324
                    $box->endFooter();
325
                    $box->end();
326
                    ?>
327
328
                </div>
329
                <?php Pjax::end() ?>
330
            </div>
331
            <?php if (Yii::$app->user->can('hub.read') && !empty($model->bindings)) : ?>
332
                <div class="row">
333
                    <div class="col-md-12">
334
                        <?php $box = Box::begin(['renderBody' => false]) ?>
335
                        <?php $box->beginHeader() ?>
336
                            <?= $box->renderTitle(Yii::t('hipanel:server', 'Switches')) ?>
337
                            <?php if (Yii::$app->user->can('server.update')) : ?>
338
                                <?php $box->beginTools(['class' => 'box-tools pull-right']) ?>
339
                                    <?= Html::a(
340
                                        Yii::t('hipanel:server', 'Assign hubs'),
341
                                        ['@server/assign-hubs', 'id' => $model->id],
342
                                        ['class' => 'btn btn-box-tool']
343
                                    ) ?>
344
                                <?php $box->endTools() ?>
345
                            <?php endif ?>
346
                        <?php $box->endHeader() ?>
347
                        <?php $box->beginBody() ?>
348
                            <div class="table-responsive">
349
                            <?= ServerGridView::detailView([
350
                                'model' => $model,
351
                                'boxed' => false,
352
                                'columns' => array_map(function ($binding) {
353
                                    /** @var \hipanel\modules\server\models\Binding $binding */
354
                                    return [
355
                                        'class' => BindingColumn::class,
356
                                        'attribute' => $binding->typeWithNo,
357
                                    ];
358
                                }, $model->bindings),
359
                            ]) ?>
360
                            </div>
361
                        <?php $box->endBody() ?>
362
                        <?php $box->end() ?>
363
                    </div>
364
                </div>
365
            <?php endif ?>
366
            <?= $this->render('@hipanel/modules/server/views/_configuration-view', [
367
                'model' => $model,
368
                'configAttrs' => ['summary', 'order_no', 'units'],
369
            ]) ?>
370
        </div>
371
        <div class="col-md-5">
372
            <?php echo $this->render('_ip', ['model' => $model]) ?>
373
            <?php if (isset($chartsData['server_traf'])) : ?>
374
                <div class="row">
375
                    <div class="col-md-12">
376
                        <?php
377
                        $box = Box::begin(['renderBody' => false]);
378
                        $box->beginHeader();
379
                        echo $box->renderTitle(Yii::t('hipanel:server', 'Traffic consumption'));
380
                        $box->beginTools();
381
                        echo ChartOptions::widget([
382
                            'id' => 'server_traf',
383
                            'form' => [
384
                                'action' => 'draw-chart',
385
                            ],
386
                            'hiddenInputs' => [
387
                                'id' => ['value' => $model->id],
388
                                'type' => ['value' => 'server_traf'],
389
                            ],
390
                        ]);
391
                        $box->endTools();
392
                        $box->endHeader();
393
                        $box->beginBody();
394
                            echo $this->render('_consumption', [
395
                                'labels' => $chartsLabels,
396
                                'data' => $chartsData,
397
                                'consumptionBase' => 'server_traf',
398
                            ]);
399
                        $box->endBody();
400
                        $box->end();
401
                        ?>
402
                    </div>
403
                </div>
404
            <?php endif ?>
405
            <?php if (isset($chartsData['server_traf95'])) : ?>
406
                <div class="row">
407
                    <div class="col-md-12">
408
                        <?php
409
                        $box = Box::begin(['renderBody' => false]);
410
                        $box->beginHeader();
411
                        echo $box->renderTitle(Yii::t('hipanel:server', 'Bandwidth consumption'));
412
                        $box->beginTools();
413
                        echo ChartOptions::widget([
414
                            'id' => 'server_traf95',
415
                            'form' => [
416
                                'action' => 'draw-chart',
417
                            ],
418
                            'hiddenInputs' => [
419
                                'id' => ['value' => $model->id],
420
                                'type' => ['value' => 'server_traf95'],
421
                            ],
422
                        ]);
423
                        $box->endTools();
424
                        $box->endHeader();
425
                        $box->beginBody();
426
                            echo $this->render('_consumption', [
427
                                'labels' => $chartsLabels,
428
                                'data' => $chartsData,
429
                                'consumptionBase' => 'server_traf95',
430
                            ]);
431
                        $box->endBody();
432
                        $box->end();
433
                        ?>
434
                    </div>
435
                </div>
436
            <?php endif ?>
437
        </div>
438
        <div class="clearfix"></div>
439
        <?php if ($model->consumptions) : ?>
440
            <div class="col-md-7">
441
                <?= ResourceConsumptionTable::widget(['model' => $model]) ?>
442
            </div>
443
        <?php endif; ?>
444
    </div>
445
446
<?php
447
448
$this->registerCss('
449
th {
450
    white-space: nowrap;
451
}
452
.btn-block {
453
    margin-bottom: .5em
454
}');
455
456
if ($model->running_task) {
457
    ServerTaskCheckerAsset::register($this);
458
    $checkerOptions = Json::encode([
459
        'id' => $model->id,
460
        'ajax' => ['url' => Url::to('@server/is-operable')],
461
        'pjaxSelector' => '#' . Yii::$app->params['pjax']['id'],
462
    ]);
463
    $this->registerJs("$('.server-view').serverTaskChecker($checkerOptions);");
464
}
465