Completed
Push — master ( bb5bc8...bee967 )
by Dmitry
05:17
created

ServerForm::tableName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
c 0
b 0
f 0
ccs 0
cts 0
cp 0
rs 10
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
namespace hipanel\modules\server\forms;
4
5
use hipanel\helpers\StringHelper;
6
use hipanel\modules\server\models\Server;
7
use hipanel\modules\server\validators\MacValidator;
8
use yii\helpers\ArrayHelper;
9
10
/**
11
 * Class ServerForm represent create/update form
12
 */
13
class ServerForm extends Server
14
{
15
    use \hipanel\base\ModelTrait;
16
17
    /**
18
     * @inheritdoc
19
     */
20
    public static function tableName()
21
    {
22
        return 'server';
23
    }
24
25
    /**
26
     * Create ServerForm model from Server model
27
     *
28
     * @param Server $server
29
     * @return ServerForm
30
     */
31
    public static function fromServer(Server $server): ServerForm
32
    {
33
        return new self(array_merge($server->getAttributes(), ['server' => $server->name, 'scenario' => 'update'], [
34
            'ips' => implode(',', ArrayHelper::getColumn($server->ips, 'ip')),
0 ignored issues
show
Bug Best Practice introduced by
The property ips does not exist on hipanel\modules\server\models\Server. Since you implemented __get, consider adding a @property annotation.
Loading history...
35
        ]));
36
    }
37
38
    /**
39
     * @inheritdoc
40
     */
41
    public function rules()
42
    {
43
        return array_merge(parent::rules(), [
44
45
            // Create/update servers
46
            [['server', 'type'], 'required', 'on' => ['create', 'update']],
47
            [['server', 'dc'], 'unique', 'on' => ['create']],
48
            [
49 1
                ['server'], 'unique', 'on' => ['update'], 'when' => function ($model) {
50
                if ($model->isAttributeChanged('server')) {
51 1
                    return Server::findOne($model->id)->server !== $model->server;
52
                }
53 1
54
                return false;
55
            },
56 1
            ],
57
            [
58
                ['dc'], 'unique', 'on' => ['update'], 'when' => function ($model) {
59
                if ($model->isAttributeChanged('dc')) {
60
                    return Server::findOne($model->id)->dc !== $model->dc;
61
                }
62 1
63
                return false;
64
            },
65 1
            ],
66
            [['name', 'dc', 'label', 'order_no', 'hwsummary'], 'string', 'on' => ['create', 'update']],
67
            [['mac'], MacValidator::class, 'on' => ['create', 'update']],
68
            [
69
                ['ips'], 'filter',
70
                'filter' => function ($value) {
71 1
                    return (mb_strlen($value) > 0) ? StringHelper::mexplode($value) : '';
72
                },
73
                'on' => ['create', 'update'],
74
            ],
75
            [['ips'], 'each', 'rule' => ['ip'], 'on' => ['create', 'update']],
76 1
        ]);
77 1
    }
78
}
79
80