PasswordResetRequestForm::rules()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 15
rs 9.4285
cc 1
eloc 10
nc 1
nop 0
1
<?php
2
3
namespace yiicod\auth\models;
4
5
use Yii;
6
use yii\base\Model;
7
8
/**
9
 * Password reset request form
10
 */
11
class PasswordResetRequestForm extends Model
12
{
13
    public $email;
14
    /**
15
     * @var type User model
16
     */
17
    private $_user = null;
18
19
    /**
20
     * @inheritdoc
21
     */
22
    public function rules()
23
    {
24
        $targetClass = Yii::$app->get('auth')->modelMap['user']['class'];
25
26
        return [
27
            ['email', 'filter', 'filter' => 'trim'],
28
            ['email', 'required'],
29
            ['email', 'email'],
30
            ['email', 'exist',
31
                'targetClass' => $targetClass,
32
                'targetAttribute' => $targetClass::attributesMap()['fieldEmail'],
33
                'message' => 'There is no user with such email.',
34
            ],
35
        ];
36
    }
37
38
    public function findUser()
39
    {
40
        if (null === $this->_user) {
41
            $userClass = Yii::$app->get('auth')->modelMap['user']['class'];
42
43
            $this->_user = $userClass::find()
44
                ->where(['email' => $this->email])
45
                ->byPasswordResetRequest()
46
                ->one();
47
        }
48
49
        return $this->_user;
50
    }
51
52
    /**
53
     * Sends an email with a link, for resetting the password.
54
     *
55
     * @return bool whether the email was send
56
     */
57
    public function resetPassword()
58
    {
59
        /* @var $user User */
60
        $user = $this->findUser();
61
62
        if ($user) {
63
            $user->generatePasswordResetToken();
64
65
            return $user->save();
66
        }
67
68
        return false;
69
    }
70
}
71