Completed
Push — master ( ccfeeb...7d9725 )
by Alexey
02:50 queued 46s
created

PasswordResetRequestForm::getUser()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 19
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

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