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.
68 lines
1.7 KiB
68 lines
1.7 KiB
<?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(); |
|
} |
|
}
|
|
|