Example #1
0
 public function register(Request $request)
 {
     $fb = new Facebook();
     // валидация
     $paramsToValidate = array('email' => $request->email, 'password' => $request->password, 'provider' => $request->provider);
     $validatorRules = array('email' => ['required', 'email'], 'password' => ['required', 'min:3'], 'provider' => ['string']);
     $validator = Validator::make($paramsToValidate, $validatorRules);
     if ($validator->fails()) {
         return $this->response->validatorError($validator->messages());
     }
     // проверим не занят ли емейл
     $user = User::findByEmail($request->email);
     if ($user) {
         return $this->response->onError('Email is already belongs to some of our users');
     }
     // зарегистрируем и авторизуем пользователя
     $user = User::create(array('name' => '', 'email' => $request->email, 'password' => md5($request->password)));
     Auth::login($user, true);
     // если юзер зарегался через соц сети, то получим данные из них (фото, имя)
     if ($request->provider === 'facebook' && $fb->token()) {
         $fbUserData = $fb->api('/me');
         $fbPhoto = $fb->getPhoto($fbUserData->id);
         $user->name = $fbUserData->name;
         if (isset($fbPhoto->data->url)) {
             $photoDir = '/var/www/whatitmeans/data/www/what-it-means.ru/files/users/photos/' . $user->id;
             try {
                 File::saveFromUrl($photoDir, 'main_photo.jpg', $fbPhoto->data->url);
             } catch (Exception $e) {
             }
         }
         UserSocGlue::create(array('user_id' => $user->id, 'provider' => 'facebook', 'provider_user_id' => $fbUserData->id));
         $user->save();
     }
     // вернем ответ
     return $this->response->onSuccess('User created');
 }
 public function relatedImages()
 {
     // валидация
     $paramsToValidate = array('phrase' => Input::get('phrase'));
     $validatorRules = array('phrase' => ['required']);
     $validator = Validator::make($paramsToValidate, $validatorRules);
     if ($validator->fails()) {
         return $this->response->validatorError($validator->messages());
     }
     // выйдем если фразы нет в базе
     $phrase = Phrase::findByPhrase(Input::get('phrase'));
     if (!$phrase) {
         return $this->response->onError('Phrase not found in dictionary');
     }
     // поиск изображений локально
     $localImages = PhraseImage::findByPhrase($phrase->id);
     if ($localImages) {
         return $this->response->onSuccess($this->relatedImagesOutput($localImages));
     }
     // поиск на сторонних ресурсах
     $gi = new gettyImages();
     $googleSearch = new googleSearchApi(env('GOOGLE_API_KEY'), env('GOOGLE_SEARCH_ID'));
     $gettyImages = $gi->getImages(Input::get('phrase'));
     if ($gettyImages) {
         // сохраним $imageSavingsLimit изображения
         $counter = 0;
         foreach ($gettyImages as $image) {
             if ($counter === $this->imageSavingsLimit) {
                 break;
             }
             $photo = PhraseImage::create(array('phrase_id' => $phrase->id, 'source' => 'gettyImages', 'source_url' => $image['url'], 'title' => $image['title'], 'source_photo_id' => $image['id']));
             try {
                 $dir = '/var/www/whatitmeans/data/www/what-it-means.ru/files/phrases/photos/' . $photo->id;
                 File::saveFromUrl($dir, 'photo.jpg', $image['url']);
             } catch (Exception $e) {
                 PhraseImage::destroy($photo->id);
             }
             $counter++;
         }
     }
     // если на gettyImages найдено меньше изображений чем задано в лимите, попробуем поискать их в гугле
     if (!$gettyImages || count($gettyImages) < $this->imageSavingsLimit) {
         $newLimit = !$gettyImages ? $this->imageSavingsLimit : $this->imageSavingsLimit - count($gettyImages);
         $googleImages = $googleSearch->searchImages(Input::get('phrase'));
         $counter = 0;
         foreach ($googleImages as $image) {
             if ($counter === $newLimit) {
                 break;
             }
             $photo = PhraseImage::create(array('phrase_id' => $phrase->id, 'source' => 'google', 'source_url' => $image->link, 'title' => $image->snippet, 'source_photo_id' => $image->link));
             try {
                 $dir = '/var/www/whatitmeans/data/www/what-it-means.ru/files/phrases/photos/' . $photo->id;
                 if (!file_exists($dir)) {
                     mkdir($dir);
                 }
                 $img = Image::make($image->link);
                 $img->save($dir . '/photo.jpg', 85);
             } catch (Exception $e) {
                 PhraseImage::destroy($photo->id);
             }
             $counter++;
         }
     }
     // отправим изображения
     if ($gettyImages || $googleImages) {
         $localImages = PhraseImage::findByPhrase($phrase->id);
         if ($localImages) {
             return $this->response->onSuccess($this->relatedImagesOutput($localImages));
         }
     }
     // если ничего не найдено
     if (!$gettyImages && !$googleImages) {
         return $this->response->onSuccess(array());
     }
 }