You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
<?php
|
|
|
|
namespace frontend\models;
|
|
|
|
|
|
|
|
use core\entities\user\User;
|
|
|
|
use Yii;
|
|
|
|
use yii\base\Exception;
|
|
|
|
use yii\base\Model;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Password reset request form
|
|
|
|
*/
|
|
|
|
class PasswordResetRequestForm extends Model
|
|
|
|
{
|
|
|
|
public string $email;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @inheritdoc
|
|
|
|
*/
|
|
|
|
public function rules(): array
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
['email', 'trim'],
|
|
|
|
['email', 'required'],
|
|
|
|
['email', 'email'],
|
|
|
|
['email', 'exist',
|
|
|
|
'targetClass' => User::class,
|
|
|
|
'filter' => ['status' => User::STATUS_ACTIVE],
|
|
|
|
'message' => 'There is no user with this email address.'
|
|
|
|
],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sends an email with a link, for resetting the password.
|
|
|
|
* @return bool
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
public function sendEmail(): bool
|
|
|
|
{
|
|
|
|
/* @var $user User */
|
|
|
|
$user = User::findOne([
|
|
|
|
'status' => User::STATUS_ACTIVE,
|
|
|
|
'email' => $this->email,
|
|
|
|
]);
|
|
|
|
|
|
|
|
if (!$user) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
|
|
|
|
$user->generatePasswordResetToken();
|
|
|
|
if (!$user->save()) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return Yii::$app
|
|
|
|
->mailer
|
|
|
|
->compose(
|
|
|
|
['html' => 'passwordResetToken-html', 'text' => 'passwordResetToken-text'],
|
|
|
|
['user' => $user]
|
|
|
|
)
|
|
|
|
->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name . ' robot'])
|
|
|
|
->setTo($this->email)
|
|
|
|
->setSubject('Password reset for ' . Yii::$app->name)
|
|
|
|
->send();
|
|
|
|
}
|
|
|
|
}
|