frontend/modules/user/models/ResetPasswordForm.php
<?php
/*
* This file is part of the HomeFinanceV2 project.
*
* (c) Rafalsky.com <http://github.com/Rafalsky/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace frontend\modules\user\models;
use common\models\UserToken;
use yii\base\InvalidParamException;
use yii\base\Model;
/**
* Password reset form
*/
class ResetPasswordForm extends Model
{
/**
* @var
*/
public $password;
/**
* @var \common\models\UserToken
*/
private $token;
/**
* Creates a form model given a token.
*
* @param string $token
* @param array $config name-value pairs that will be used to initialize the object properties
* @throws \yii\base\InvalidParamException if token is empty or not valid
*/
public function __construct($token, $config = [])
{
if (empty($token) || !is_string($token)) {
throw new InvalidParamException('Password reset token cannot be blank.');
}
/** @var UserToken $tokenModel */
$this->token = UserToken::find()
->notExpired()
->byType(UserToken::TYPE_PASSWORD_RESET)
->byToken($token)
->one();
if (!$this->token) {
throw new InvalidParamException('Wrong password reset token.');
}
parent::__construct($config);
}
/**
* @inheritdoc
*/
public function rules()
{
return [
['password', 'required'],
['password', 'string', 'min' => 6],
];
}
/**
* Resets password.
*
* @return boolean if password was reset.
* @throws \yii\db\StaleObjectException
* @throws \Exception
*/
public function resetPassword()
{
$user = $this->token->user;
$user->password = $this->password;
if ($user->save()) {
$this->token->delete();
};
return true;
}
/**
* @return array
*/
public function attributeLabels()
{
return [
'password' => \Yii::t('frontend', 'Password')
];
}
}