public function attemptEmailChange($code)
    {
        // TODO refactor method

        /** @var Token $token */
        $token = $this->finder->findToken([
            'user_id' => $this->id,
            'code'    => $code,
        ])->andWhere(['in', 'type', [Token::TYPE_CONFIRM_NEW_EMAIL, Token::TYPE_CONFIRM_OLD_EMAIL]])->one();

        if (empty($this->unconfirmed_email) || $token === null || $token->isExpired) {
            \Yii::$app->session->setFlash('danger', \Yii::t('user', 'Your confirmation token is invalid or expired'));
        } else {
            $token->delete();

            if (empty($this->unconfirmed_email)) {
                \Yii::$app->session->setFlash('danger', \Yii::t('user', 'An error occurred processing your request'));
            } elseif ($this->finder->findUser(['email' => $this->unconfirmed_email])->exists() == false) {
                if ($this->module->emailChangeStrategy == Module::STRATEGY_SECURE) {
                    switch ($token->type) {
                        case Token::TYPE_CONFIRM_NEW_EMAIL:
                            $this->flags |= self::NEW_EMAIL_CONFIRMED;
                            \Yii::$app->session->setFlash(
                                'success',
                                \Yii::t(
                                    'user',
                                    'Awesome, almost there. Now you need to click the confirmation link sent to your old email address'
                                )
                            );
                            break;
                        case Token::TYPE_CONFIRM_OLD_EMAIL:
                            $this->flags |= self::OLD_EMAIL_CONFIRMED;
                            \Yii::$app->session->setFlash(
                                'success',
                                \Yii::t(
                                    'user',
                                    'Awesome, almost there. Now you need to click the confirmation link sent to your new email address'
                                )
                            );
                            break;
                    }
                }
                if ($this->module->emailChangeStrategy == Module::STRATEGY_DEFAULT
                    || ($this->flags & self::NEW_EMAIL_CONFIRMED && $this->flags & self::OLD_EMAIL_CONFIRMED)) {
                    $this->email = $this->unconfirmed_email;
                    $this->unconfirmed_email = null;
                    \Yii::$app->session->setFlash('success', \Yii::t('user', 'Your email address has been changed'));
                }
                $this->save(false);
            }
        }
    }
public function attemptEmailChange($code)
    {
        // TODO refactor method

        /** @var Token $token */
        $token = $this->finder->findToken([
            'user_id' => $this->id,
            'code'    => $code,
        ])->andWhere(['in', 'type', [Token::TYPE_CONFIRM_NEW_EMAIL, Token::TYPE_CONFIRM_OLD_EMAIL]])->one();

        if (empty($this->unconfirmed_email) || $token === null || $token->isExpired) {
            \Yii::$app->session->setFlash('danger', \Yii::t('user', 'Your confirmation token is invalid or expired'));
        } else {
            $token->delete();

            if (empty($this->unconfirmed_email)) {
                \Yii::$app->session->setFlash('danger', \Yii::t('user', 'An error occurred processing your request'));
            } elseif ($this->finder->findUser(['email' => $this->unconfirmed_email])->exists() == false) {
                if ($this->module->emailChangeStrategy == Module::STRATEGY_SECURE) {
                    switch ($token->type) {
                        case Token::TYPE_CONFIRM_NEW_EMAIL:
                            $this->flags |= self::NEW_EMAIL_CONFIRMED;
                            \Yii::$app->session->setFlash(
                                'success',
                                \Yii::t(
                                    'user',
                                    'Awesome, almost there. Now you need to click the confirmation link sent to your old email address'
                                )
                            );
                            break;
                        case Token::TYPE_CONFIRM_OLD_EMAIL:
                            $this->flags |= self::OLD_EMAIL_CONFIRMED;
                            \Yii::$app->session->setFlash(
                                'success',
                                \Yii::t(
                                    'user',
                                    'Awesome, almost there. Now you need to click the confirmation link sent to your new email address'
                                )
                            );
                            break;
                    }
                }
                if ($this->module->emailChangeStrategy == Module::STRATEGY_DEFAULT
                    || ($this->flags & self::NEW_EMAIL_CONFIRMED && $this->flags & self::OLD_EMAIL_CONFIRMED)) {
                    $this->email = $this->unconfirmed_email;
                    $this->unconfirmed_email = null;
                    \Yii::$app->session->setFlash('success', \Yii::t('user', 'Your email address has been changed'));
                }
                $this->save(false);
            }
        }
    }
public function attemptEmailChange ( $ code ) { // TODO refactor method /** @var Token $token */ $ token = $ this -> finder -> findToken ( [ 'user_id' => $ this -> id , 'code' => $ code , ] ) -> andWhere ( [ 'in' , 'type' , [ Token :: TYPE_CONFIRM_NEW_EMAIL , Token :: TYPE_CONFIRM_OLD_EMAIL ] ] ) -> one ( ) ; if ( empty ( $ this -> unconfirmed_email ) || $ token === null || $ token -> isExpired ) { \ Yii :: $ app -> session -> setFlash ( 'danger' , \ Yii :: t ( 'user' , 'Your confirmation token is invalid or expired' ) ) ; } else { $ token -> delete ( ) ; if ( empty ( $ this -> unconfirmed_email ) ) { \ Yii :: $ app -> session -> setFlash ( 'danger' , \ Yii :: t ( 'user' , 'An error occurred processing your request' ) ) ; } elseif ( $ this -> finder -> findUser ( [ 'email' => $ this -> unconfirmed_email ] ) -> exists ( ) == false ) { if ( $ this -> module -> emailChangeStrategy == Module :: STRATEGY_SECURE ) { switch ( $ token -> type ) { case Token :: TYPE_CONFIRM_NEW_EMAIL : $ this -> flags |= self :: NEW_EMAIL_CONFIRMED ; \ Yii :: $ app -> session -> setFlash ( 'success' , \ Yii :: t ( 'user' , 'Awesome, almost there. Now you need to click the confirmation link sent to your old email address' ) ) ; break ; case Token :: TYPE_CONFIRM_OLD_EMAIL : $ this -> flags |= self :: OLD_EMAIL_CONFIRMED ; \ Yii :: $ app -> session -> setFlash ( 'success' , \ Yii :: t ( 'user' , 'Awesome, almost there. Now you need to click the confirmation link sent to your new email address' ) ) ; break ; } } if ( $ this -> module -> emailChangeStrategy == Module :: STRATEGY_DEFAULT || ( $ this -> flags & self :: NEW_EMAIL_CONFIRMED && $ this -> flags & self :: OLD_EMAIL_CONFIRMED ) ) { $ this -> email = $ this -> unconfirmed_email ; $ this -> unconfirmed_email = null ; \ Yii :: $ app -> session -> setFlash ( 'success' , \ Yii :: t ( 'user' , 'Your email address has been changed' ) ) ; } $ this -> save ( false ) ; } } }
This method attempts changing user email. If user's "unconfirmed_email" field is empty is returns false, else if
somebody already has email that equals user's "unconfirmed_email" it returns false, otherwise returns true and
updates user's password.

@param string $code

@return bool
@throws \Exception
This method attempts changing user email . If user s unconfirmed_email field is empty is returns false else if somebody already has email that equals user s unconfirmed_email it returns false otherwise returns true and updates user s password .