示例#1
0
 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));
 }