Passed
Push — master ( 0e2339...54cdca )
by Paweł
04:38
created

UidAttributeBehavior::init()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created for IG Monitoring.
4
 * User: jakim <[email protected]>
5
 * Date: 24.07.2018
6
 */
7
8
namespace app\components;
9
10
11
use yii\behaviors\AttributeBehavior;
12
use yii\db\BaseActiveRecord;
13
14
class UidAttributeBehavior extends AttributeBehavior
15
{
16
    /**
17
     * @var string
18
     */
19
    public $attribute = 'uid';
20
21
    public $preserveNonEmptyValues = true;
22
23
    public function init()
24
    {
25
        parent::init();
26
        $this->attributes = [
27
            BaseActiveRecord::EVENT_BEFORE_INSERT => $this->attribute,
28
            BaseActiveRecord::EVENT_BEFORE_UPDATE => $this->attribute,
29
        ];
30
    }
31
32
    protected function getValue($event)
33
    {
34
        do {
35
            $uid = \Yii::$app->security->generateRandomString(64);
36
            /** @var \yii\db\ActiveRecord $class */
37
            $class = get_class($this->owner);
38
            $uidExist = $class::find()
39
                ->andWhere([$class::tableName() . '.' . $this->attribute => $uid])
40
                ->exists();
41
        } while ($uidExist);
42
43
        return $uid;
44
    }
45
}