PasswordResetRequest   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 7
eloc 25
dl 0
loc 51
c 0
b 0
f 0
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A sendEmail() 0 24 5
A rules() 0 11 2
1
<?php
2
namespace toir427\admin\models\form;
3
4
use toir427\admin\components\UserStatus;
5
use toir427\admin\models\User;
6
use Yii;
7
use yii\base\Model;
8
9
/**
10
 * Password reset request form
11
 */
12
class PasswordResetRequest extends Model
13
{
14
    public $email;
15
16
    /**
17
     * @inheritdoc
18
     */
19
    public function rules()
20
    {
21
        $class = Yii::$app->getUser()->identityClass ? : 'toir427\admin\models\User';
22
        return [
23
            ['email', 'filter', 'filter' => 'trim'],
24
            ['email', 'required'],
25
            ['email', 'email'],
26
            ['email', 'exist',
27
                'targetClass' => $class,
28
                'filter' => ['status' => UserStatus::ACTIVE],
29
                'message' => 'There is no user with such email.'
30
            ],
31
        ];
32
    }
33
34
    /**
35
     * Sends an email with a link, for resetting the password.
36
     *
37
     * @return boolean whether the email was send
38
     */
39
    public function sendEmail()
40
    {
41
        /* @var $user User */
42
        $class = Yii::$app->getUser()->identityClass ? : 'toir427\admin\models\User';
43
        $user = $class::findOne([
44
            'status' => UserStatus::ACTIVE,
45
            'email' => $this->email,
46
        ]);
47
48
        if ($user) {
49
            if (!ResetPassword::isPasswordResetTokenValid($user->password_reset_token)) {
50
                $user->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();
51
            }
52
53
            if ($user->save()) {
54
                return Yii::$app->mailer->compose(['html' => 'passwordResetToken-html', 'text' => 'passwordResetToken-text'], ['user' => $user])
55
                    ->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name . ' robot'])
56
                    ->setTo($this->email)
57
                    ->setSubject('Password reset for ' . Yii::$app->name)
58
                    ->send();
59
            }
60
        }
61
62
        return false;
63
    }
64
}
65