/** * Возвращает прогресс пользователя * @return array|null */ public function getProgress() { $query = 'SELECT test_id, count(case when answers.is_true then 1 end) as true_count FROM questions JOIN answers ON questions.id = answers.question_id JOIN tests_progress ON answers.id = tests_progress.answer_id JOIN tests ON tests_progress.test_id = tests.id WHERE tests.is_passed AND tests.profile_id = ' . self::profileId() . ' GROUP BY test_id;'; $progress = DB::select(DB::raw($query)); if ($progress) { $data = array(); $rowData = array(); foreach ($progress as $row) { $query = 'SELECT start_datetime, pass_duration, levels.name as level FROM tests JOIN levels ON tests.level_id = levels.id WHERE tests.id = ' . $row->test_id . ';'; $test = DB::select(DB::raw($query))[0]; $datetime = explode(' ', $test->start_datetime); $rowData['start_date'] = ApiController::convertDateToClient($datetime[0]); $rowData['start_time'] = explode('.', $datetime[1])[0]; $rowData['start_datetime'] = $test->start_datetime; $rowData['pass_duration'] = $test->pass_duration; $rowData['level'] = $test->level; $rowData['true_count'] = $row->true_count; $rowData['id'] = $row->test_id; array_push($data, $rowData); } usort($data, array($this, 'cmp_date_start')); return $data; } else { return null; } }