session(); if ($session->get('date-'.$language, NULL) != date('Y-m-d')) { $session->forget('guesses-'.$language); $session->forget('tla-'.$language); $session->forget('correct-'.$language); $session->forget('review-'.$language); $session->put('tla-array-'.$language, ['', '', '']); $session->put('date-'.$language, date('Y-m-d')); } } public function fetch_tla(Request $request, ?string $language = 'en') { $allowedLanguages = array('hu', 'en'); if ( !in_array($language, $allowedLanguages) ) $language = 'en'; $tla = Tla::GetCurrentTla($language); if ($tla == NULL) return response()->json([ 'no_tla' => true ]); $this->session_flush($request, $language); $session = $request->session(); return response()->json([ 'hint' => $tla->hint, 'guesses' => $session->get('guesses-'.$language, []), 'date' => $session->get('date-'.$language), 'tla' => $session->get('tla-'.$language) == $tla->acronym ? $tla->acronym : NULL, 'context' => $session->get('tla-'.$language) == $tla->acronym ? $tla->context : NULL, 'submitter' => $tla->submitter, 'correct' => $session->get('correct-'.$language), 'tla_array' => ['','',''], ]); } public function check_tla(Request $request, ?string $language = 'en') { $request->validate([ 'guess' => 'required|array|size:3', ]); $this->session_flush($request, $language); $tla_object = Tla::GetCurrentTla($language); $session = $request->session(); $tla = explode(' ', strtolower($tla_object->acronym)); $guess_array = $request->all()['guess']; for ($i = 0; $i<3; $i++) { $guess_array[$i] = strtolower($guess_array[$i]); } $proposal = []; for ($i = 0; $i < 3; $i++) { for ($j = 0; $j < 3; $j++) { if ( $guess_array[$j] == $tla[$i] ) { $proposal[$i][$j] = $i-$j != 0 ? 3 : 4; } else if ( $guess_array[$j][0] == $tla[$i][0] ) { $proposal[$i][$j] = $i-$j != 0 ? 1 : 2; } else $proposal[$i][$j] = 0; } if ($proposal[$i][0] <= $proposal[$i][1] || $proposal[$i][0] <= $proposal[$i][2]) $proposal[$i][0] = 0; if ($proposal[$i][1] <= $proposal[$i][2] || $proposal[$i][1] <= $proposal[$i][0]) $proposal[$i][1] = 0; if ($proposal[$i][2] <= $proposal[$i][0] || $proposal[$i][2] <= $proposal[$i][1]) $proposal[$i][2] = 0; } for ($i = 0; $i < 3; $i++) { array_push($guess_array, max($proposal[0][$i], $proposal[1][$i], $proposal[2][$i])); } $score = 0; for ($i = 0; $i<3; $i++) { $guess_array[$i] = ucfirst($guess_array[$i]); $score += $guess_array[$i + 3]; } $session->push('guesses-'.$language, $guess_array); $guesses = $session->get('guesses-'.$language, NULL); if ($score == 12 || count($guesses) == env('MAX_GUESSES', 10)) { $session->put('tla-'.$language, $tla_object->acronym); if ($score == 12) $session->put('correct-'.$language, true); } $tla_array = $session->get('tla-array-'.$language); for ($i = 0; $i < 3; $i++) { if ($tla_array[$i] == "" && $guess_array[$i + 3] == 2) $tla_array[$i] = $tla[$i]; } $session->put('tla-array-'.$language, $tla_array); return response()->json([ 'guesses' => $guesses, 'date' => $session->get('date'), 'tla' => $session->get('tla-'.$language) == $tla_object->acronym ? $tla_object->acronym : NULL, 'context' => $session->get('tla-'.$language) == $tla_object->acronym ? $tla_object->context : NULL, 'score' => $score, 'correct' => $session->get('correct-'.$language), 'tla_array' => $tla_array, ]); } public function suggestion(Request $request, ?String $language = "en") { $request->validate([ 'acronym' => 'required', 'hint' => 'required', 'context' => 'required', ]); $requestData = $request->input(); $tla = new TlaSuggestion($requestData); $tla->save(); return response($tla); } public function review(Request $request, String $language, int $type) { $session = $request->session(); if ($session->get('correct-'.$language) == true) { $current = $session->get('review-'.$language); $tla = Tla::GetCurrentTla($language); if ($type != 2) { if ($current == $type) { if ($current == 1) $tla->likes--; else if ($current == -1) $tla->dislikes--; $type = 2; } else { if ($current == 1) $tla->likes--; else if ($current == -1) $tla->dislikes--; if ($type == 1) $tla->likes++; else if ($type == -1) $tla->dislikes++; } $tla->save(); $session->put('review-'.$language, $type); } else $type = $current; return response()->json([ 'likes' => $tla->likes, 'dislikes' => $tla->dislikes, 'current' => $type, ]); } else return response(null, 403); } }