PasswordResetRequestForm::getUser()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 19
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 10
c 2
b 0
f 0
dl 0
loc 19
rs 9.9332
cc 4
nc 4
nop 0
1
<?php
2
3
namespace modules\users\models;
4
5
use Yii;
6
use yii\base\Exception;
7
use yii\base\Model;
8
use modules\users\Module;
9
10
/**
11
 * Class PasswordResetRequestForm
12
 * @package modules\users\models\frontend
13
 *
14
 * @property-read bool|User $user
15
 * @property string $email Email
16
 */
17
class PasswordResetRequestForm extends Model
18
{
19
    public $email;
20
21
    /**
22
     * @inheritdoc
23
     * @return array
24
     */
25
    public function rules()
26
    {
27
        return [
28
            ['email', 'trim'],
29
            ['email', 'required'],
30
            ['email', 'email'],
31
            ['email', 'exist',
32
                'targetClass' => User::class,
33
                'filter' => ['status' => User::STATUS_ACTIVE],
34
                'message' => Module::translate('module', 'There is no user with this e-mail.'),
35
            ],
36
        ];
37
    }
38
39
    /**
40
     * Sends an email with a link, for resetting the password.
41
     *
42
     * @return bool
43
     * @throws Exception
44
     */
45
    public function sendEmail()
46
    {
47
48
        if ($user = $this->getUser()) {
49
            return Yii::$app->mailer->compose([
50
                'html' => '@modules/users/mail/passwordResetToken-html',
51
                'text' => '@modules/users/mail/passwordResetToken-text'
52
            ], ['user' => $user])
53
                ->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name . ' robot'])
54
                ->setTo($this->email)
55
                ->setSubject(Module::translate('module', 'Password reset for') . ' ' . Yii::$app->name)
56
                ->send();
57
        }
58
        return false;
59
    }
60
61
    /**
62
     * @return false|User
63
     * @throws Exception
64
     */
65
    private function getUser()
66
    {
67
        /* @var $user User */
68
        $user = User::findOne([
69
            'status' => User::STATUS_ACTIVE,
70
            'email' => $this->email,
71
        ]);
72
73
        if ($user === null) {
74
            return false;
75
        }
76
77
        if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
78
            $user->generatePasswordResetToken();
79
            if (!$user->save()) {
80
                return false;
81
            }
82
        }
83
        return $user;
84
    }
85
}
86