Completed
Push — master ( 55e0f0...d0f882 )
by Alexey
11:22
created

User::setStatus()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 8.8571
c 0
b 0
f 0
cc 5
eloc 9
nc 5
nop 0
1
<?php
2
namespace modules\users\models;
3
4
use Yii;
5
use yii\helpers\ArrayHelper;
6
use modules\users\Module;
7
8
/**
9
 * Class User
10
 * @package modules\users\models
11
 */
12
class User extends BaseUser
13
{
14
    const LENGTH_STRING_PASSWORD_MIN = 6;
15
    const LENGTH_STRING_PASSWORD_MAX = 16;
16
17
    const SCENARIO_ADMIN_CREATE = 'adminCreate';
18
    const SCENARIO_ADMIN_UPDATE = 'adminUpdate';
19
    const SCENARIO_ADMIN_PASSWORD_UPDATE = 'adminPasswordUpdate';
20
    const SCENARIO_PROFILE_UPDATE = 'profileUpdate';
21
    const SCENARIO_PASSWORD_UPDATE = 'passwordUpdate';
22
    const SCENARIO_PROFILE_DELETE = 'profileDelete';
23
24
    /**
25
     * @var string
26
     */
27
    public $currentPassword;
28
29
    /**
30
     * @var string
31
     */
32
    public $newPassword;
33
34
    /**
35
     * @var string
36
     */
37
    public $newPasswordRepeat;
38
39
    /**
40
     * @inheritdoc
41
     */
42
    public function rules()
43
    {
44
        return ArrayHelper::merge(parent::rules(), [
45
            [['newPassword', 'newPasswordRepeat'], 'required', 'on' => [self::SCENARIO_ADMIN_CREATE, self::SCENARIO_PASSWORD_UPDATE, self::SCENARIO_ADMIN_PASSWORD_UPDATE]],
46
            ['newPassword', 'string', 'min' => self::LENGTH_STRING_PASSWORD_MIN],
47
            ['newPasswordRepeat', 'compare', 'compareAttribute' => 'newPassword'],
48
            ['currentPassword', 'validateCurrentPassword', 'skipOnEmpty' => false, 'skipOnError' => false],
49
        ]);
50
    }
51
52
    /**
53
     * @param $attribute
54
     */
55
    public function validateCurrentPassword($attribute)
56
    {
57
        if (!empty($this->newPassword) && !empty($this->newPasswordRepeat) && !$this->hasErrors()) {
58
            if ($this->$attribute) {
59
                if (!$this->validatePassword($this->$attribute))
60
                    $this->addError($attribute, Module::t('module', 'Incorrect current password.'));
61
            } else {
62
                $this->addError($attribute, Module::t('module', 'Enter your current password.'));
63
            }
64
        } else {
65
            $this->addError($attribute, Module::t('module', 'Not all fields are filled in correctly.'));
66
        }
67
    }
68
69
    /**
70
     * @inheritdoc
71
     */
72
    public function scenarios()
73
    {
74
        $scenarios = parent::scenarios();
75
        $scenarios[self::SCENARIO_ADMIN_CREATE] = ['avatar', 'username', 'email', 'status', 'newPassword', 'newPasswordRepeat', 'registration_type', 'first_name', 'last_name'];
76
        $scenarios[self::SCENARIO_ADMIN_UPDATE] = ['username', 'email', 'status', 'first_name', 'last_name'];
77
        $scenarios[self::SCENARIO_ADMIN_PASSWORD_UPDATE] = ['newPassword', 'newPasswordRepeat'];
78
        $scenarios[self::SCENARIO_PASSWORD_UPDATE] = ['currentPassword', 'newPassword', 'newPasswordRepeat'];
79
        $scenarios[self::SCENARIO_PROFILE_UPDATE] = ['email', 'first_name', 'last_name'];
80
        $scenarios[self::SCENARIO_PROFILE_DELETE] = ['status'];
81
        $scenarios['default'] = ['username', 'email', 'password_hash', 'status', 'auth_key', 'email_confirm_token'];
82
        return $scenarios;
83
    }
84
85
    /**
86
     * @inheritdoc
87
     */
88
    public function attributeLabels()
89
    {
90
        return ArrayHelper::merge(parent::attributeLabels(), [
91
            'userRoleName' => Module::t('module', 'Role'),
92
            'currentPassword' => Module::t('module', 'Current Password'),
93
            'newPassword' => Module::t('module', 'New Password'),
94
            'newPasswordRepeat' => Module::t('module', 'Repeat Password'),
95
        ]);
96
    }
97
98
    /**
99
     * Actions before saving
100
     *
101
     * @param bool $insert
102
     * @return bool
103
     */
104
    public function beforeSave($insert)
105
    {
106
        if (parent::beforeSave($insert)) {
107
            if (!empty($this->newPassword)) {
108
                $this->setPassword($this->newPassword);
109
                Yii::$app->session->setFlash('success', Module::t('module', 'Password changed successfully.'));
110
            }
111
            return true;
112
        }
113
        return false;
114
    }
115
116
    /**
117
     * Set Status
118
     */
119
    public function setStatus()
120
    {
121
        if ($this->status == self::STATUS_ACTIVE) {
122
            $this->status = self::STATUS_BLOCKED;
123
        } else if ($this->status == self::STATUS_BLOCKED) {
124
            $this->status = self::STATUS_ACTIVE;
125
        } else if ($this->status == self::STATUS_WAIT) {
126
            $this->status = self::STATUS_ACTIVE;
127
        } else if ($this->status == self::STATUS_DELETED) {
128
            $this->status = self::STATUS_WAIT;
129
        }
130
    }
131
}
132