Completed
Push — master ( 342ffa...2ca792 )
by Andrii
05:25
created

PasswordResetRequestForm::sendEmail()   B

Complexity

Conditions 4
Paths 5

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

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