Esempio n. 1
0
 /**
  * Декодирует кодовую структуру теста
  * Возвращает двумерный массив, где по i идут различные структуры вопросов, j=0 - количество вопросов данной структуры, j=1 - сам код вопроса
  */
 public function destruct($id_test)
 {
     $test = new Test();
     $query = $test->whereId_test($id_test)->select('structure')->first();
     $structure = $query->structure;
     $destructured = explode(';', $structure);
     $array = [];
     for ($i = 0; $i < count($destructured); $i++) {
         $temp_array = explode('-', $destructured[$i]);
         for ($j = 0; $j <= 1; $j++) {
             $array[$i][$j] = $temp_array[$j];
         }
     }
     return $array;
 }
Esempio n. 2
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;
     }
 }