ILIAS  release_8 Revision v8.24
class.ilTestExportRandomQuestionSet.php
Go to the documentation of this file.
1<?php
2
26{
30 protected $srcPoolDefList;
31
36
37 protected function initXmlExport()
38 {
39 global $DIC;
40 $ilDB = $DIC['ilDB'];
41 $component_repository = $DIC['component.repository'];
42
43 require_once 'Modules/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinitionFactory.php';
45 $ilDB,
46 $this->test_obj
47 );
48
49 require_once 'Modules/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinitionList.php';
50 $this->srcPoolDefList = new ilTestRandomQuestionSetSourcePoolDefinitionList(
51 $ilDB,
52 $this->test_obj,
53 $srcPoolDefFactory
54 );
55
56 $this->srcPoolDefList->loadDefinitions();
57
58 // fau: fixRandomTestExportPages - use the complete random question list
59 // ilObjTest::exportPagesXML() uses $this->questions
60 // ilObjTest::loadQuestions() loads only those of the current active_id of ilUser
61 $this->test_obj->questions = $this->getQuestionIds();
62 // fau.
63 require_once 'Modules/Test/classes/class.ilTestRandomQuestionSetStagingPoolQuestionList.php';
64
65 $this->stagingPoolQuestionListByPoolId = array();
66 }
67
68 protected function populateQuestionSetConfigXml(ilXmlWriter $xmlWriter)
69 {
70 $xmlWriter->xmlStartTag('RandomQuestionSetConfig');
71 $this->populateCommonSettings($xmlWriter);
72 $this->populateQuestionStages($xmlWriter);
73 $this->populateSelectionDefinitions($xmlWriter);
74 $xmlWriter->xmlEndTag('RandomQuestionSetConfig');
75 }
76
77 protected function populateCommonSettings(ilXmlWriter $xmlWriter)
78 {
79 global $DIC;
80 $tree = $DIC['tree'];
81 $ilDB = $DIC['ilDB'];
82 $component_repository = $DIC['component.repository'];
83
84 $questionSetConfig = new ilTestRandomQuestionSetConfig($tree, $ilDB, $component_repository, $this->test_obj);
85 $questionSetConfig->loadFromDb();
86
87 $xmlWriter->xmlElement('RandomQuestionSetSettings', array(
88 'amountMode' => $questionSetConfig->getQuestionAmountConfigurationMode(),
89 'questAmount' => $questionSetConfig->getQuestionAmountPerTest(),
90 'homogeneous' => $questionSetConfig->arePoolsWithHomogeneousScoredQuestionsRequired(),
91 'synctimestamp' => $questionSetConfig->getLastQuestionSyncTimestamp()
92 ));
93 }
94
95 protected function populateQuestionStages(ilXmlWriter $xmlWriter)
96 {
97 $xmlWriter->xmlStartTag('RandomQuestionStage');
98
99 foreach ($this->srcPoolDefList->getInvolvedSourcePoolIds() as $poolId) {
100 $questionList = $this->getLoadedStagingPoolQuestionList($poolId);
101
102 $xmlWriter->xmlStartTag('RandomQuestionStagingPool', array('poolId' => $poolId));
103 $xmlWriter->xmlData(implode(',', $questionList->getQuestions()));
104 $xmlWriter->xmlEndTag('RandomQuestionStagingPool');
105 }
106
107 $xmlWriter->xmlEndTag('RandomQuestionStage');
108 }
109
110 protected function populateSelectionDefinitions(ilXmlWriter $xmlWriter)
111 {
112 $xmlWriter->xmlStartTag('RandomQuestionSelectionDefinitions');
113
114 foreach ($this->srcPoolDefList as $definition) {
115 $attributes = array(
116 'id' => $definition->getId(),
117 'ref_id' => $definition->getPoolRefId(),
118 'poolId' => $definition->getPoolId(),
119 'questAmount' => $definition->getQuestionAmount() ?? '',
120 'poolQuestCount' => $definition->getPoolQuestionCount(),
121 'position' => $definition->getSequencePosition(),
122 'typeFilter' => implode(',', $definition->getTypeFilterAsTypeTags()),
123 );
124
125
126 // #21330
127 $mappedTaxFilter = $definition->getMappedTaxonomyFilter();
128 if (is_array($mappedTaxFilter) && count($mappedTaxFilter) > 0) {
129 $attributes['taxFilter'] = serialize($mappedTaxFilter);
130 }
131
132 $xmlWriter->xmlStartTag('RandomQuestionSelectionDefinition', $attributes);
133 $xmlWriter->xmlElement('RandomQuestionSourcePoolTitle', null, $definition->getPoolTitle());
134 $xmlWriter->xmlElement('RandomQuestionSourcePoolPath', null, $definition->getPoolPath());
135 $xmlWriter->xmlEndTag('RandomQuestionSelectionDefinition');
136 }
137
138 $xmlWriter->xmlEndTag('RandomQuestionSelectionDefinitions');
139 }
140
141 protected function getQuestionsQtiXml(): string
142 {
143 $questionQtiXml = '';
144
145 foreach ($this->srcPoolDefList->getInvolvedSourcePoolIds() as $poolId) {
146 $questionList = $this->getLoadedStagingPoolQuestionList($poolId);
147
148 foreach ($questionList as $questionId) {
149 $questionQtiXml .= $this->getQuestionQtiXml($questionId);
150 }
151 }
152
153 return $questionQtiXml;
154 }
155
159 protected function getQuestionIds(): array
160 {
161 $questionIds = array();
162
163 foreach ($this->srcPoolDefList->getInvolvedSourcePoolIds() as $poolId) {
164 $questionList = $this->getLoadedStagingPoolQuestionList($poolId);
165
166 foreach ($questionList as $questionId) {
167 $questionIds[] = $questionId;
168 }
169 }
170
171 return $questionIds;
172 }
173
179 {
180 if (!isset($this->stagingPoolQuestionListByPoolId[$poolId])) {
181 global $DIC;
182 $ilDB = $DIC['ilDB'];
183 $component_repository = $DIC['component.repository'];
184
185 $questionList = new ilTestRandomQuestionSetStagingPoolQuestionList($ilDB, $component_repository);
186 $questionList->setTestId($this->test_obj->getTestId());
187 $questionList->setPoolId($poolId);
188 $questionList->loadQuestions();
189
190 $this->stagingPoolQuestionListByPoolId[$poolId] = $questionList;
191 }
192
193 return $this->stagingPoolQuestionListByPoolId[$poolId];
194 }
195}
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getQuestionQtiXml($questionId)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
xmlElement(string $tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
xmlEndTag(string $tag)
Writes an endtag.
xmlData(string $data, bool $encode=true, bool $escape=true)
Writes data.
xmlStartTag(string $tag, ?array $attrs=null, bool $empty=false, bool $encode=true, bool $escape=true)
Writes a starttag.
global $DIC
Definition: feed.php:28
$attributes
Definition: metadata.php:248