ChangePassword.php 2.31 KB
<?php

namespace frontend\modules\user\models\form;

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

/**
 * Class ChangePassword
 *
 * @package frontend\modules\user\models\form
 * @author FilamentV <vortex.filament@gmail.com>
 * @copyright (c), Thread
 */
class ChangePassword extends \yii\base\Model
{
    public $password, $password_old, $password_confirmation;
    //
    const FLASH_KEY = 'ChangePassword';
    //
    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', 'password_confirmation', 'password_old'], 'required'],
            [['password_old'], 'validateOLDPassword'],
            [['password_confirmation'], 'compare', 'compareAttribute' => 'password',],
            [['password', 'password_confirmation'], 'string', 'min' => $this->_password_min_length],
        ];
    }

    /**
     * @return array
     */
    public function scenarios()
    {
        return [
            'passwordChange' => ['password', 'password_confirmation', 'password_old'],
        ];
    }

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

    /**
     *
     */
    public function validateOLDPassword()
    {
        if (!$this->hasErrors()) {
            $user = User::getUserById(Yii::$app->getUser()->id);
            if (!$user || !$user->validatePassword($this->password_old)) {
                $this->addError('password_old', Yii::t('user', 'Incorrect password'));
            }
        }
    }

    /**
     * @param bool|true $value
     */
    public function addFlash($value = true)
    {
        Yii::$app->getSession()->addFlash(self::FLASH_KEY, $value);
    }

    /**
     * @return mixed
     */
    public function getFlash()
    {
        return Yii::$app->getSession()->getFlash(self::FLASH_KEY, '');
    }
}