diff --git a/main/inc/lib/moodleexport/QuizExport.php b/main/inc/lib/moodleexport/QuizExport.php index 7cd6794b6ba..69c11285833 100644 --- a/main/inc/lib/moodleexport/QuizExport.php +++ b/main/inc/lib/moodleexport/QuizExport.php @@ -209,13 +209,16 @@ private function mapQuestionType(string $quizType): string */ private function getAnswersForQuestion(int $questionId): array { + static $globalCounter = 0; $answers = []; $quizResources = $this->course->resources[RESOURCE_QUIZQUESTION] ?? []; foreach ($quizResources as $questionData) { if ($questionData->source_id == $questionId) { foreach ($questionData->answers as $answer) { + $globalCounter++; $answers[] = [ + 'id' => $questionId * 1000 + $globalCounter, 'text' => $answer['answer'], 'fraction' => $answer['correct'] == '1' ? 100 : 0, 'feedback' => $answer['comment'], @@ -316,9 +319,10 @@ private function createQuizXml(array $quizData, string $destinationDir): void // Add question instances $xmlContent .= ' '.PHP_EOL; + $slotIndex = 1; foreach ($quizData['questions'] as $question) { $xmlContent .= ' '.PHP_EOL; - $xmlContent .= ' '.$question['id'].''.PHP_EOL; + $xmlContent .= ' '.$slotIndex.''.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' '.$question['id'].''.PHP_EOL; @@ -326,6 +330,7 @@ private function createQuizXml(array $quizData, string $destinationDir): void $xmlContent .= ' $@NULL@$'.PHP_EOL; $xmlContent .= ' '.$question['maxmark'].''.PHP_EOL; $xmlContent .= ' '.PHP_EOL; + $slotIndex++; } $xmlContent .= ' '.PHP_EOL; @@ -417,8 +422,10 @@ private function exportTrueFalseQuestion(array $question): string } $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; - $xmlContent .= ' '.($question['answers'][0]['id'] ?? '0').''.PHP_EOL; - $xmlContent .= ' '.($question['answers'][1]['id'] ?? '0').''.PHP_EOL; + $trueId = $question['answers'][0]['id'] ?? 0; + $falseId = $question['answers'][1]['id'] ?? 0; + $xmlContent .= ' '.$trueId.''.PHP_EOL; + $xmlContent .= ' '.$falseId.''.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL;