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()); } }