/** * Finds user by [[username]] * * @return User|null */ public function getUser() { if ($this->_user === false) { $client = Yii::$app->authClientCollection->getClient('facebook'); if ($this->fb_token) { $token = new \yii\authclient\OAuthToken(); $token->setToken($this->fb_token); $client->setAccessToken($token); } $picture = $client->api('me?fields=picture', 'GET'); $profile = $client->api('me?fields=id,first_name,last_name,gender,email', 'GET'); $user = User::find()->andWhere(['fb_uid' => $profile['id']])->one(); if (!$user) { $user = new User(); $user->fb_uid = $profile['id']; $user->email = $profile['email']; $user->generateAuthKey(); $user->first_name = $profile['first_name']; $user->last_name = $profile['last_name']; $user->setGender($profile['gender']); $user->save(); if (isset($picture['picture']['data']['url'])) { // save image of user facebook if isset $user->setImageFromFB($picture['picture']['data']['url']); $user->save(); } } $this->_user = $user; } return $this->_user; }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = User::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params, ''); if (!$this->validate()) { return $dataProvider; } if (!$this->lat || !$this->lon) { $this->lat = Yii::$app->user->identity->lat; $this->lon = Yii::$app->user->identity->lon; } // @TODO : FULL TEXT NOT WORK(not found to back search only to front) $search_string = explode(" ", $this->search_string); $query->andWhere(['like', 'first_name', $search_string])->orWhere(['like', 'last_name', $search_string]); // @ENDTODO if ($this->radius) { $query->andWhere("acos(sin(lat * 0.0175) * sin(:lat * 0.0175)\n + cos(lat * 0.0175) * cos(:lat * 0.0175) *\n cos((:lng * 0.0175) - (lon * 0.0175))\n ) * 3959 <= :radius", [':lat' => $this->lat, ':lng' => $this->lon, ':radius' => $this->radius]); } return $dataProvider; }