public function show($id, TestValidator $testvalidator) { $test = Test::with('course')->findOrFail($id); if (!$test->isPublished()) { abort(404); } if (!$test->isUnlocked()) { return redirect('course/' . $test->course->id)->with(['error' => 'Et voi vielä suorittaa koetta <b>' . $test->title . '</b>!']); } $viewData = ['test' => $test, 'hasPassed' => false, 'hasPassedFull' => false, 'minimumToPass' => ceil($test->questions()->count() * 0.5), 'validation' => false, 'given_answers' => [], 'feedback' => [], 'authentication_type' => 0, 'isMaterialPage' => false]; $data = []; if (Auth::check()) { $archive = Auth::user()->archives()->where('test_id', $id)->first(); if ($archive && $archive->data) { $data = (object) json_decode($archive->data, true); $viewData['given_answers'] = $data->given_answers; if (@$data->feedback) { $viewData['feedback'] = $data->feedback; } $fullValidation = $testvalidator->WithAnswers($test, $data->given_answers); $viewData['validation'] = $fullValidation['validation']; $viewData['hasPassed'] = $fullValidation['num_correct'] / $fullValidation['total'] >= 0.5; $viewData['hasPassedFull'] = $fullValidation['num_correct'] == $fullValidation['total']; } } return view('test.show')->with($viewData); }
function revalidate($id, TestValidator $testvalidator) { $archive = Archive::findOrFail($id); $archive->data = json_decode($archive->data, true); $old_data = $archive->data; $data = $testvalidator->WithAnswers($archive->test, $archive->data['given_answers']); if (@$old_data['feedback']) { $data['feedback'] = $old_data['feedback']; } $archive->data = json_encode($data); $archive->save(); return ['success' => true, 'data' => $data]; }