category_title ?: ''); if (preg_match('/^([A-Z]+)(\d+)$/i', $qualification, $matches)) { $qualification = strtoupper($matches[1]) . '.' . $matches[2]; } $months = [ 1 => 'Styczeń', 2 => 'Luty', 3 => 'Marzec', 4 => 'Kwiecień', 5 => 'Maj', 6 => 'Czerwiec', 7 => 'Lipiec', 8 => 'Sierpień', 9 => 'Wrzesień', 10 => 'Październik', 11 => 'Listopad', 12 => 'Grudzień', ]; $period = ''; if (preg_match('/-(\d{2})\.(\d{2})$/', (string) $sheet->test_symbol, $matches)) { $month = (int) $matches[2]; $year = (int) $sheet->exam_year ?: 2000 + (int) $matches[1]; $period = ($months[$month] ?? '') . ' ' . $year; } elseif ($sheet->exam_year) { $period = (string) $sheet->exam_year; } return trim('Kwalifikacja ' . $qualification . ($period ? ' - ' . $period : '') . ' (' . $sheet->test_symbol . ')'); } public function display($tpl = null) { $this->getDocument()->getWebAssetManager()->registerAndUseStyle( 'com_testquestions.exam', 'media/com_testquestions/egzamin.css' ); $this->items = $this->get('Items'); $this->symbol = $this->get('State')->get('filter.test_symbol'); $this->symbols = $this->get('TestSymbols'); $this->results = $this->buildResults($this->items); return parent::display($tpl); } protected function buildResults(array $items) { $input = Factory::getApplication()->getInput(); if ($input->getCmd('task') !== 'check' || $input->getMethod() !== 'POST') { return null; } $answers = (array) $input->post->get('answers', [], 'array'); $results = []; $correct = 0; foreach ($items as $item) { $selected = isset($answers[$item->id]) ? trim((string) $answers[$item->id]) : ''; $isCorrect = false; if ($item->question_type === 'open') { $patterns = preg_split('/\s*\|\s*/', (string) $item->answer_open, -1, PREG_SPLIT_NO_EMPTY); foreach ($patterns as $pattern) { if (mb_strtolower(trim($pattern), 'UTF-8') === mb_strtolower($selected, 'UTF-8')) { $isCorrect = true; break; } } } else { $isCorrect = (string) $item->correct_answer === $selected; } if ($isCorrect) { $correct++; } $results[$item->id] = [ 'selected' => $selected, 'correct' => $isCorrect, ]; } return [ 'items' => $results, 'correct' => $correct, 'total' => count($items), 'percentage' => count($items) ? round(($correct / count($items)) * 100, 2) : 0, ]; } }