ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilTestExportRandomQuestionSet.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once 'Modules/Test/classes/class.ilTestExport.php';
5
13{
17 protected $srcPoolDefList;
18
23
24 protected function initXmlExport()
25 {
26 global $ilDB, $ilPluginAdmin;
27
28 require_once 'Modules/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinitionFactory.php';
30 $ilDB,
31 $this->test_obj
32 );
33
34 require_once 'Modules/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinitionList.php';
35 $this->srcPoolDefList = new ilTestRandomQuestionSetSourcePoolDefinitionList(
36 $ilDB,
37 $this->test_obj,
38 $srcPoolDefFactory
39 );
40
41 $this->srcPoolDefList->loadDefinitions();
42
43 // fau: fixRandomTestExportPages - use the complete random question list
44 // ilObjTest::exportPagesXML() uses $this->questions
45 // ilObjTest::loadQuestions() loads only those of the current active_id of ilUser
46 $this->test_obj->questions = $this->getQuestionIds();
47 // fau.
48 require_once 'Modules/Test/classes/class.ilTestRandomQuestionSetStagingPoolQuestionList.php';
49
50 $this->stagingPoolQuestionListByPoolId = array();
51 }
52
53 protected function populateQuestionSetConfigXml(ilXmlWriter $xmlWriter)
54 {
55 $xmlWriter->xmlStartTag('RandomQuestionSetConfig');
56 $this->populateCommonSettings($xmlWriter);
57 $this->populateQuestionStages($xmlWriter);
58 $this->populateSelectionDefinitions($xmlWriter);
59 $xmlWriter->xmlEndTag('RandomQuestionSetConfig');
60 }
61
62 protected function populateCommonSettings(ilXmlWriter $xmlWriter)
63 {
64 global $tree, $ilDB, $ilPluginAdmin;
65
66 require_once 'Modules/Test/classes/class.ilTestRandomQuestionSetConfig.php';
67 $questionSetConfig = new ilTestRandomQuestionSetConfig($tree, $ilDB, $ilPluginAdmin, $this->test_obj);
68 $questionSetConfig->loadFromDb();
69
70 $xmlWriter->xmlElement('RandomQuestionSetSettings', array(
71 'amountMode' => $questionSetConfig->getQuestionAmountConfigurationMode(),
72 'questAmount' => $questionSetConfig->getQuestionAmountPerTest(),
73 'homogeneous' => $questionSetConfig->arePoolsWithHomogeneousScoredQuestionsRequired(),
74 'synctimestamp' => $questionSetConfig->getLastQuestionSyncTimestamp()
75 ));
76 }
77
78 protected function populateQuestionStages(ilXmlWriter $xmlWriter)
79 {
80 $xmlWriter->xmlStartTag('RandomQuestionStage');
81
82 foreach ($this->srcPoolDefList->getInvolvedSourcePoolIds() as $poolId) {
83 $questionList = $this->getLoadedStagingPoolQuestionList($poolId);
84
85 $xmlWriter->xmlStartTag('RandomQuestionStagingPool', array('poolId' => $poolId));
86 $xmlWriter->xmlData(implode(',', $questionList->getQuestions()));
87 $xmlWriter->xmlEndTag('RandomQuestionStagingPool');
88 }
89
90 $xmlWriter->xmlEndTag('RandomQuestionStage');
91 }
92
93 protected function populateSelectionDefinitions(ilXmlWriter $xmlWriter)
94 {
95 $xmlWriter->xmlStartTag('RandomQuestionSelectionDefinitions');
96
97 foreach ($this->srcPoolDefList as $definition) {
98 $attributes = array(
99 'id' => $definition->getId(),
100 'poolId' => $definition->getPoolId(),
101 'poolQuestCount' => $definition->getPoolQuestionCount(),
102 'questAmount' => $definition->getQuestionAmount(),
103 'position' => $definition->getSequencePosition()
104 );
105
106 // #21330
107 $mappedTaxFilter = $definition->getMappedTaxonomyFilter();
108 if (is_array($mappedTaxFilter) && count($mappedTaxFilter) > 0) {
109 $attributes['taxFilter'] = serialize($mappedTaxFilter);
110 }
111
112 $xmlWriter->xmlStartTag('RandomQuestionSelectionDefinition', $attributes);
113 $xmlWriter->xmlElement('RandomQuestionSourcePoolTitle', null, $definition->getPoolTitle());
114 $xmlWriter->xmlElement('RandomQuestionSourcePoolPath', null, $definition->getPoolPath());
115 $xmlWriter->xmlEndTag('RandomQuestionSelectionDefinition');
116 }
117
118 $xmlWriter->xmlEndTag('RandomQuestionSelectionDefinitions');
119 }
120
121 protected function getQuestionsQtiXml()
122 {
123 $questionQtiXml = '';
124
125 foreach ($this->srcPoolDefList->getInvolvedSourcePoolIds() as $poolId) {
126 $questionList = $this->getLoadedStagingPoolQuestionList($poolId);
127
128 foreach ($questionList as $questionId) {
129 $questionQtiXml .= $this->getQuestionQtiXml($questionId);
130 }
131 }
132
133 return $questionQtiXml;
134 }
135
139 protected function getQuestionIds()
140 {
141 $questionIds = array();
142
143 foreach ($this->srcPoolDefList->getInvolvedSourcePoolIds() as $poolId) {
144 $questionList = $this->getLoadedStagingPoolQuestionList($poolId);
145
146 foreach ($questionList as $questionId) {
147 $questionIds[] = $questionId;
148 }
149 }
150
151 return $questionIds;
152 }
153
158 protected function getLoadedStagingPoolQuestionList($poolId)
159 {
160 if (!isset($this->stagingPoolQuestionListByPoolId[$poolId])) {
161 global $ilDB, $ilPluginAdmin;
162
163 $questionList = new ilTestRandomQuestionSetStagingPoolQuestionList($ilDB, $ilPluginAdmin);
164 $questionList->setTestId($this->test_obj->getTestId());
165 $questionList->setPoolId($poolId);
166 $questionList->loadQuestions();
167
168 $this->stagingPoolQuestionListByPoolId[$poolId] = $questionList;
169 }
170
171 return $this->stagingPoolQuestionListByPoolId[$poolId];
172 }
173}
An exception for terminatinating execution or to throw for unit testing.
Export class for tests.
getQuestionQtiXml($questionId)
XML writer class.
xmlEndTag($tag)
Writes an endtag.
xmlData($data, $encode=true, $escape=true)
Writes data.
xmlElement($tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
xmlStartTag($tag, $attrs=null, $empty=false, $encode=true, $escape=true)
Writes a starttag.
$attributes
global $ilDB