ResetPasswordForm.php 1.81 KB
<?php

namespace frontend\modules\user\models\form;

use Yii;
//
use frontend\modules\user\models\User;

/**
 * Class ResetPasswordForm
 *
 * @package frontend\modules\user\models\form
 * @author FilamentV <vortex.filament@gmail.com>
 * @copyright (c), Thread
 */
class ResetPasswordForm extends \yii\base\Model
{
    public $password;
    /**
     * @var User
     */
    private $_user;
    protected $_password_min_length;

    /**
     *
     */
    public function init()
    {
        parent::init();
        /**
         * @var $module \frontend\modules\user\User
         */
        $module = Yii::$app->getModule('user');
        $this->_password_min_length = $module->password_min_length;
    }

    /**
     * @return array
     */
    public function rules()
    {
        return [
            [['password'], 'required'],
            [['password'], 'string', 'min' => $this->_password_min_length],
        ];
    }

    /**
     * @return array
     */
    public function attributeLabels()
    {
        return [
            'password' => Yii::t('user', 'Password'),
        ];
    }

    /**
     * @return array
     */
    public function scenarios()
    {
        return [
            'setPassword' => ['password']
        ];
    }

    /**
     * @param $token
     * @return User|null
     */
    public function initUserByToken($token)
    {
        $this->_user = (!empty($token) && is_string($token)) ? User::findByPasswordResetToken($token) : null;
        return $this->_user;
    }

    /**
     * @return bool
     */
    public function setPassword()
    {
        $user = $this->_user;
        if ($user) {
            $user->setScenario('setPassword');
            $user->setPassword($this->password);
            $user->removePasswordResetToken();

            return $user->save(false);
        }
        return false;
    }
}