/** * @param $params * * @return ActiveDataProvider */ public function search($params) { $query = User::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } if ($this->createTime !== null) { $date = strtotime($this->createTime); $query->andFilterWhere(['between', 'createTime', $date, $date + 3600 * 24]); } $query->andFilterWhere(['like', 'username', $this->username])->andFilterWhere(['like', 'email', $this->email])->andFilterWhere(['registrationIp' => $this->registrationIp]); return $dataProvider; }
/** * This method attempts changing user email. If user's "unconfirmedEmail" field is empty is returns false, else if * somebody already has email that equals user's "unconfirmedEmail" it returns false, otherwise returns true and * updates user's password. * * @param string $code * * @return bool * @throws \Exception */ public function attemptEmailChange($code) { /** @var Token $token */ $token = Token::find()->where(['userId' => $this->id, 'code' => $code])->andWhere(['in', 'type', [Token::TYPE_CONFIRM_NEW_EMAIL, Token::TYPE_CONFIRM_OLD_EMAIL]])->one(); if (empty($this->unconfirmedEmail) || $token === null || $token->isExpired) { Yii::$app->session->setFlash('danger', Yii::t('users', 'Your confirmation token is invalid or expired')); } else { $token->delete(); if (empty($this->unconfirmedEmail)) { Yii::$app->session->setFlash('danger', Yii::t('users', 'An error occurred processing your request')); } elseif (User::find()->andWhere(['email' => $this->unconfirmedEmail])->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('users', '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('users', '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->unconfirmedEmail; $this->unconfirmedEmail = null; Yii::$app->session->setFlash('success', Yii::t('users', 'Your email address has been changed')); } $this->save(false); } } }