function directionTraining(Request $request) { // авторизация if (!Auth::check()) { return $this->response->onAuthError(); } // валидация $paramsToValidate = array('trainingName' => $request->trainingName); $validatorRules = array('trainingName' => ['required', 'string', 'in:' . \implode(',', $this->availableTrainings)]); $validator = Validator::make($paramsToValidate, $validatorRules); if ($validator->fails()) { return $this->responce->validatorError($validator->messages()); } // получение слов которые доступны для тренировки $collection = UserDictionary::where('user_id', Auth::id())->learned(false)->StageNotPassed($request->trainingName)->lastTrained($this->trainInterval)->take($this->trainWordsLimit)->get(); if ($collection->count() === 0) { return $this->responce->onSuccess([]); } // добавление перевода к словам foreach ($collection as $word) { $record = Phrase::findByPhrase($word->phrase); if (!$record) { continue; } $word->translation = $record->translate; $word->translate = $record->translate; $word->meaning = $record->meaning; } // получение произвольных слов для создания теста // вернем ответ $randomWords = Phrase::select('phrase', 'translate')->random()->take(20)->get(); return $this->responce->onSuccess(array('trainWords' => $collection->toArray(), 'randomWords' => $randomWords->toArray())); }
public function translate(Request $request) { // валидация $paramsToValidate = array('phrase' => Input::get('phrase')); $validatorRules = array('phrase' => ['required']); $validator = Validator::make($paramsToValidate, $validatorRules); if ($validator->fails()) { return $this->response->validatorError($validator->messages()); } // лог Stat::log('translation query'); // форматируем фразу для дальнейшей работы $phraseFormatted = urldecode($request->phrase); $phraseFormatted = strtolower($phraseFormatted); // поиск в базе только в том случае, если длина фразы < @idiomMaxWordLength слов // в @idiomMaxWordLength слов может вписаться идиома $phraseWordsCount = count(explode(' ', $phraseFormatted)); if ($phraseWordsCount < $this->idiomMaxWordLength) { $translation = Phrase::findByPhrase($phraseFormatted); if ($translation) { return $this->response->onSuccess(array('translation' => $translation->translate, 'meaning' => $translation->meaning)); } } // если перевод не найден, ищем в гугле, и если гугл не находит перевод то выйдем $googleTranslation = GoogleApi::translate($phraseFormatted, 'enru'); if (!$googleTranslation) { return $this->response->onError('no translation for:' . $request->phrase); } // поиск описания слова в vocabulary.com $translationVoc = false; if ($phraseWordsCount < $this->idiomMaxWordLength) { $translationVoc = VocabularyApi::translation($phraseFormatted); } // перед тем как вернуть результат, внесем его в базу $phraseMeaning = ''; if ($translationVoc) { $phraseMeaning = "<p class=\"short\"> {$translationVoc['short']} </p><p class=\"long\"> {$translationVoc['long']} </p>"; } $newPhrase = Phrase::create(array('phrase' => $phraseFormatted, 'translate' => $googleTranslation, 'meaning' => $phraseMeaning)); // вернем результат return $this->response->onSuccess(array('translation' => $newPhrase->translate, 'meaning' => $newPhrase->meaning)); }