コード例 #1
0
ファイル: LoginForm.php プロジェクト: bolom009/testwork_api
 /**
  * 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;
 }
コード例 #2
0
ファイル: UserSearch.php プロジェクト: bolom009/testwork_api
 /**
  * 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;
 }