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 
4 require_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) {
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 }
xmlStartTag($tag, $attrs=null, $empty=false, $encode=true, $escape=true)
Writes a starttag.
getQuestionQtiXml($questionId)
XML writer class.
$attributes
Export class for tests.
xmlData($data, $encode=true, $escape=true)
Writes data.
xmlEndTag($tag)
Writes an endtag.
Create styles array
The data for the language used.
xmlElement($tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
global $ilDB