Ejemplo n.º 1
0
 /**
  * Запрещает проходить более одного тренировочного теста одновременно
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \Closure  $next
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     if (Session::has('test')) {
         //если у пользователя есть открытый тест
         $id_result = Session::get('test');
         $query = Result::whereId_result($id_result)->select('saved_test', 'test_name', 'id_test')->first();
         $test_name = $query->test_name;
         $id_test = $query->id_test;
         $current_test_id = $request->segment(3);
         if ($id_test != $current_test_id) {
             //если начатый тест и текущая страничка не совпадает
             return view('tests.single_test', compact('test_name', 'id_test'));
         }
     }
     return $next($request);
 }
Ejemplo n.º 2
0
 /** Пользователь отказался от прохождения теста */
 public function dropTest()
 {
     if (Session::has('test')) {
         $id_result = Session::get('test');
         $date = date('Y-m-d H:i:s', time());
         Session::forget('test');
         Session::forget('end_time');
         Result::whereId_result($id_result)->update(['result_date' => $date, 'result' => -1, 'mark_ru' => -1, 'mark_eu' => 'drop']);
         //Присваиваем результату и оценке значения -1
     }
     return redirect('tests');
 }
Ejemplo n.º 3
0
 /** Проверка теста */
 public function checkTest(Request $request)
 {
     //обработать ответ на вопрос
     if (Session::has('test')) {
         //проверяем повторность обращения к результам
         $current_test = Session::get('test');
     } else {
         return redirect('tests');
     }
     Session::forget('test');
     //тест считается честно пройденым
     Session::forget('end_time');
     $amount = $request->input('amount');
     $id_test = $request->input('id_test');
     $test = new Test();
     $score_sum = 0;
     //сумма набранных баллов
     $points_sum = 0;
     //сумма максимально овзможных баллов
     $choice = [];
     //запоминаем выбранные варианты пользователя
     $j = 1;
     $query = $test->whereId_test($id_test)->select('total', 'test_name', 'amount', 'test_type')->first();
     $total = $query->total;
     $test_type = $query->test_type;
     for ($i = 0; $i < $amount; $i++) {
         //обрабатываем каждый вопрос
         $data = $request->input($i);
         $array = json_decode($data);
         $data = $this->check($array);
         $right_or_wrong[$j] = $data['mark'];
         $choice[$j] = $data['choice'];
         $j++;
         $score_sum += $data['score'];
         //сумма набранных баллов
         $points_sum += $data['points'];
         //сумма максимально возможных баллов
     }
     if ($points_sum != 0) {
         $score = $total * $score_sum / $points_sum;
         $score = round($score, 1);
     } else {
         $score = $total;
     }
     $mark_bologna = $this->calcMarkBologna($total, $score);
     //оценки
     $mark_rus = $this->calcMarkRus($total, $score);
     $result = new Result();
     $date = date('Y-m-d H:i:s', time());
     //текущее время
     if ($test_type != 'Тренировочный') {
         //если тест контрольный
         $result->whereId_result($current_test)->update(['result_date' => $date, 'result' => $score, 'mark_ru' => $mark_rus, 'mark_eu' => $mark_bologna]);
         return view('tests.ctrresults', compact('score', 'mark_bologna', 'mark_rus'));
     } else {
         //если тест тренировочный
         $amount = $query->amount;
         $widgets = [];
         $query = $result->whereId_result($current_test)->first();
         //берем сохраненный тест из БД
         $saved_test = $query->saved_test;
         $saved_test = unserialize($saved_test);
         for ($i = 0; $i < $amount; $i++) {
             $widgets[] = View::make($saved_test[$i]['view'] . 'T', $saved_test[$i]['arguments'])->with('choice', $choice[$i + 1]);
         }
         $result->whereId_result($current_test)->update(['result_date' => $date, 'result' => $score, 'mark_ru' => $mark_rus, 'mark_eu' => $mark_bologna]);
         $widgetListView = View::make('questions.student.training_test', compact('score', 'right_or_wrong', 'mark_bologna', 'mark_rus'))->with('widgets', $widgets);
         return $widgetListView;
     }
 }