PasswordResetRequestForm::sendEmail()   B
last analyzed

Complexity

Conditions 4
Paths 5

Size

Total Lines 31
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
c 2
b 0
f 1
dl 0
loc 31
rs 8.5806
cc 4
eloc 19
nc 5
nop 0
1
<?php
2
namespace frontend\models;
3
4
use common\models\User;
5
use yii\base\Model;
6
7
/**
8
 * Password reset request form
9
 */
10
class PasswordResetRequestForm extends Model
11
{
12
    public $email;
13
14
    /**
15
     * @inheritdoc
16
     */
17
    public function rules()
18
    {
19
        return [
20
            ['email', 'filter', 'filter' => 'trim'],
21
            ['email', 'required'],
22
            ['email', 'email'],
23
            ['email', 'exist',
24
                'targetClass' => '\common\models\User',
25
                'filter' => ['status' => User::STATUS_ACTIVE],
26
                'message' => 'There is no user with such email.'
27
            ],
28
        ];
29
    }
30
31
    /**
32
     * Sends an email with a link, for resetting the password.
33
     *
34
     * @return boolean whether the email was send
35
     */
36
    public function sendEmail()
37
    {
38
        /* @var $user User */
39
        $user = User::findOne([
40
            'status' => User::STATUS_ACTIVE,
41
            'email' => $this->email,
42
        ]);
43
44
        if (!$user) {
45
            return false;
46
        }
47
        
48
        if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
49
            $user->generatePasswordResetToken();
50
        }
51
        
52
        if (!$user->save()) {
53
            return false;
54
        }
55
56
        return Yii::$app
57
            ->mailer
58
            ->compose(
59
                ['html' => 'passwordResetToken-html', 'text' => 'passwordResetToken-text'],
60
                ['user' => $user]
61
            )
62
            ->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->name . ' robot'])
63
            ->setTo($this->email)
64
            ->setSubject('Password reset for ' . \Yii::$app->name)
65
            ->send();
66
    }
67
}
68