ChangePassword.php 2.58 KB
<?php
    namespace artbox\core\models;

    use yii\base\Model;

    class ChangePassword extends Model
    {
        /**
         * @var string $oldPassword
         */
        public $oldPassword;
        /**
         * @var string $newPassword
         */
        public $newPassword;
        /**
         * @var string $newPasswordRepeat
         */
        public $newPasswordRepeat;
    
        /**
         * @inheritdoc
         */
        public function attributeLabels()
        {
            return [
                'oldPassword'       => \Yii::t('core', 'Old password'),
                'newPassword'       => \Yii::t('core', 'New password'),
                'newPasswordRepeat' => \Yii::t('core', 'New password repeat'),
            ];
        }
    
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [
                    [
                        'oldPassword',
                        'newPassword',
                        'newPasswordRepeat',
                    ],
                    'required',
                ],
                [
                    [
                        'oldPassword',
                        'newPassword',
                        'newPasswordRepeat',
                    ],
                    'string',
                    'length' => [
                        6,
                        255,
                    ],
                ],
                [
                    [ 'newPasswordRepeat' ],
                    'compare',
                    'compareAttribute' => 'newPassword',
                ],
            ];
        }
    
        /**
         * Validate old password.
         *
         * @return bool True if password valid, otherwise false
         */
        public function validatePassword()
        {
            /**
             * @var User $user
             */
            $user = \Yii::$app->user->identity;
            $result = $user->validatePassword($this->oldPassword);
            if (!$result) {
                $this->addError('oldPassword', \Yii::t('core', 'Provided old password doesn\'t match real password.'));
            }
            return $result;
        }
    
        /**
         * Save new password
         *
         * @return bool True if successfully saved
         */
        public function saveChanges()
        {
            /**
             * @var User $user
             */
            $user = \Yii::$app->user->identity;
            $user->setPassword($this->newPassword);
            $user->generateAuthKey();
            return $user->save();
        }
    }