Completed
Push — master ( 5e7707...6e3d76 )
by Igor
03:56
created

PasswordResetRequestForm   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 38.1%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 5
dl 0
loc 60
ccs 8
cts 21
cp 0.381
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A rules() 0 13 1
A attributeLabels() 0 4 1
B sendEmail() 0 22 4
1
<?php
2
3
namespace app\models\forms;
4
5
use Yii;
6
use app\models\User;
7
use app\services\Tokenizer;
8
9
class PasswordResetRequestForm extends \yii\base\Model
10
{
11
    /**
12
     * @var string
13
     */
14
    public $email;
15
16
    /**
17
     * @inheritdoc
18
     */
19 7
    public function rules()
20
    {
21
        return [
22 7
            ['email', 'filter', 'filter' => 'trim'],
23
            ['email', 'required'],
24
            ['email', 'email'],
25 7
            ['email', 'exist',
26 7
                'targetClass' => '\app\models\User',
27 7
                'filter' => ['status' => User::STATUS_ACTIVE],
28 7
                'message' => Yii::t('app.validators', 'There is no user with such email')
29
            ],
30
        ];
31
    }
32
33
    /**
34
     * @inheritdoc
35
     */
36 7
    public function attributeLabels()
37
    {
38 7
        return (new User())->attributeLabels();
39
    }
40
41
    /**
42
     * Sends an email with a link, for resetting the password
43
     *
44
     * @return boolean
45
     */
46
    public function sendEmail(): bool
47
    {
48
        /* @var $user User */
49
        $user = User::find()->email($this->email)->one();
50
        if ($user) {
51
            $tokenizer = new Tokenizer();
52
            if (!$tokenizer->validate($user->password_reset_token)) {
53
                $user->setPasswordResetToken($tokenizer->generate());
54
            }
55
56
            if ($user->save(false)) {
57
                return Yii::$app->notify->sendMessage(
58
                    $this->email,
59
                    Yii::t('app', 'Password Reset'),
60
                    'passwordResetToken',
61
                    ['user' => $user]
62
                );
63
            } // @codeCoverageIgnore
64
        } // @codeCoverageIgnore
65
66
        return false;
67
    }
68
}
69