ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilTestDynamicQuestionSet.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/TestQuestionPool/classes/class.ilAssQuestionList.php';
5
6use ILIAS\Refinery\Factory as Refinery;
7
18{
22 private $db = null;
23
27 private $lng = null;
28
32 protected $refinery;
33
37 private $pluginAdmin = null;
38
42 private $testOBJ = null;
43
47 private $completeQuestionList = null;
48
52 private $selectionQuestionList = null;
53
57 private $filteredQuestionList = null;
58
62 private $actualQuestionSequence = array();
63
70 {
71 $this->db = $db;
72 $this->lng = $lng;
73 $this->refinery = $refinery;
74 $this->pluginAdmin = $pluginAdmin;
75 $this->testOBJ = $testOBJ;
76 }
77
79
80 public function load(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilTestDynamicQuestionSetFilterSelection $filterSelection)
81 {
82 $this->completeQuestionList = $this->initCompleteQuestionList(
83 $dynamicQuestionSetConfig,
84 $filterSelection->getAnswerStatusActiveId()
85 );
86
87 $this->selectionQuestionList = $this->initSelectionQuestionList(
88 $dynamicQuestionSetConfig,
89 $filterSelection
90 );
91
92 $this->filteredQuestionList = $this->initFilteredQuestionList(
93 $dynamicQuestionSetConfig,
94 $filterSelection
95 );
96
97 $this->actualQuestionSequence = $this->initActualQuestionSequence(
98 $dynamicQuestionSetConfig,
99 $this->filteredQuestionList
100 );
101 }
102
104
105 private function initCompleteQuestionList(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, $answerStatusActiveId)
106 {
107 $questionList = $this->buildQuestionList(
108 $dynamicQuestionSetConfig->getSourceQuestionPoolId(),
109 $answerStatusActiveId
110 );
111
112 $questionList->load();
113
114 return $questionList;
115 }
116
118 {
119 $questionList = $this->buildQuestionList(
120 $dynamicQuestionSetConfig->getSourceQuestionPoolId(),
121 $filterSelection->getAnswerStatusActiveId()
122 );
123
124 if ($dynamicQuestionSetConfig->isAnswerStatusFilterEnabled()) {
125 $questionList->setAnswerStatusFilter($filterSelection->getAnswerStatusSelection());
126 }
127
128 if ($dynamicQuestionSetConfig->isTaxonomyFilterEnabled()) {
129 require_once 'Services/Taxonomy/classes/class.ilObjTaxonomy.php';
130
131 $questionList->setAvailableTaxonomyIds(ilObjTaxonomy::getUsageOfObject(
132 $dynamicQuestionSetConfig->getSourceQuestionPoolId()
133 ));
134
135 foreach ($filterSelection->getTaxonomySelection() as $taxId => $taxNodes) {
136 $questionList->addTaxonomyFilter(
137 $taxId,
138 $taxNodes,
139 $this->testOBJ->getId(),
140 $this->testOBJ->getType()
141 );
142 }
143 } elseif ($dynamicQuestionSetConfig->getOrderingTaxonomyId()) {
144 $questionList->setAvailableTaxonomyIds(array(
145 $dynamicQuestionSetConfig->getOrderingTaxonomyId()
146 ));
147 }
148
149 $questionList->setForcedQuestionIds($filterSelection->getForcedQuestionIds());
150
151 $questionList->load();
152
153 return $questionList;
154 }
155
162 {
163 $questionList = $this->buildQuestionList(
164 $dynamicQuestionSetConfig->getSourceQuestionPoolId(),
165 $filterSelection->getAnswerStatusActiveId()
166 );
167
168 if ($dynamicQuestionSetConfig->isTaxonomyFilterEnabled()) {
169 require_once 'Services/Taxonomy/classes/class.ilObjTaxonomy.php';
170
171 $questionList->setAvailableTaxonomyIds(ilObjTaxonomy::getUsageOfObject(
172 $dynamicQuestionSetConfig->getSourceQuestionPoolId()
173 ));
174
175 foreach ($filterSelection->getTaxonomySelection() as $taxId => $taxNodes) {
176 $questionList->addTaxonomyFilter(
177 $taxId,
178 $taxNodes,
179 $this->testOBJ->getId(),
180 $this->testOBJ->getType()
181 );
182 }
183 }
184
185 $questionList->load();
186
187 return $questionList;
188 }
189
190 private function initActualQuestionSequence(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilAssQuestionList $questionList)
191 {
192 if ($dynamicQuestionSetConfig->getOrderingTaxonomyId()) {
194 $questionList,
195 $dynamicQuestionSetConfig->getOrderingTaxonomyId()
196 );
197 }
198
199 return $this->getQuestionSequenceStructuredByUpdateDate($questionList);
200 }
201
203
204 private function getQuestionSequenceStructuredByTaxonomy(ilAssQuestionList $questionList, $orderingTaxId)
205 {
206 require_once 'Services/Taxonomy/classes/class.ilObjTaxonomy.php';
207 $tax = new ilObjTaxonomy($orderingTaxId);
208
209 require_once 'Modules/Test/classes/class.ilTestTaxonomyTree.php';
210 $tree = new ilTestTaxonomyTree($orderingTaxId);
211 $tree->initOrderedTreeIndex($tax);
212
213 $questionsByNode = array();
214 $nodelessQuestions = array();
215
216 foreach ($questionList->getQuestionDataArray() as $qId => $qData) {
217 if (isset($qData['taxonomies'][$orderingTaxId]) && count($qData['taxonomies'][$orderingTaxId])) {
218 foreach ($qData['taxonomies'][$orderingTaxId] as $nodeId => $itemData) {
219 $nodeOrderingPath = $tree->getNodeOrderingPathString($itemData['node_id']);
220
221 if (!isset($questionsByNode[ $nodeOrderingPath ])) {
222 $questionsByNode[ $nodeOrderingPath ] = array();
223 }
224
225 if ($tax->getItemSorting() == ilObjTaxonomy::SORT_MANUAL) {
226 $questionsByNode[ $nodeOrderingPath ][$itemData['order_nr']] = $qId;
227 } else {
228 $questionsByNode[ $nodeOrderingPath ][$qData['title'] . '::' . $qId] = $qId;
229 }
230 }
231 } else {
232 $nodelessQuestions[$qData['tstamp'] . '::' . $qId] = $qId;
233 }
234 }
235
236 foreach ($questionsByNode as $path => $questions) {
237 if ($tax->getItemSorting() == ilObjTaxonomy::SORT_MANUAL) {
238 ksort($questions, SORT_NUMERIC);
239 } else {
240 ksort($questions, SORT_STRING);
241 }
242
243 $questionsByNode[$path] = array_values($questions);
244 }
245
246 ksort($questionsByNode, SORT_STRING);
247 $sequence = array_values($questionsByNode);
248
249 ksort($nodelessQuestions);
250 $sequence[] = array_values($nodelessQuestions);
251
252 return $sequence;
253 }
254
256 {
257 $sequence = array();
258
259 foreach ($questionList->getQuestionDataArray() as $qId => $qData) {
260 $sequence[ $qData['tstamp'] . '::' . $qId ] = $qId;
261 }
262
263 ksort($sequence);
264 $sequence = array_values($sequence);
265
266 return array($sequence);
267 }
268
270
272 {
274 }
275
276 public function questionExists($questionId)
277 {
278 $questionData = $this->completeQuestionList->getQuestionDataArray();
279 return isset($questionData[$questionId]);
280 }
281
282 public function getQuestionData($questionId)
283 {
284 $questionData = $this->completeQuestionList->getQuestionDataArray();
285 return $questionData[$questionId];
286 }
287
288 public function getAllQuestionsData()
289 {
290 return $this->completeQuestionList->getQuestionDataArray();
291 }
292
294
298 public function getCompleteQuestionList()
299 {
301 }
302
306 public function getSelectionQuestionList()
307 {
309 }
310
314 public function getFilteredQuestionList()
315 {
317 }
318
324 private function buildQuestionList($sourceQuestionPoolId, $answerStatusActiveId)
325 {
326 $questionList = new ilAssQuestionList($this->db, $this->lng, $this->refinery, $this->pluginAdmin);
327 $questionList->setParentObjId($sourceQuestionPoolId);
328 $questionList->setAnswerStatusActiveId($answerStatusActiveId);
329 return $questionList;
330 }
331}
An exception for terminatinating execution or to throw for unit testing.
Builds data types.
Definition: Factory.php:20
language handling
static getUsageOfObject($a_obj_id, $a_include_titles=false)
Get usage of object.
getSourceQuestionPoolId()
getter for source question pool id
isTaxonomyFilterEnabled()
isser for taxonomie filter enabled
Administration class for plugins.
getQuestionSequenceStructuredByTaxonomy(ilAssQuestionList $questionList, $orderingTaxId)
initFilteredQuestionList(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilTestDynamicQuestionSetFilterSelection $filterSelection)
__construct(ilDBInterface $db, ilLanguage $lng, ILIAS\Refinery\Factory $refinery, ilPluginAdmin $pluginAdmin, ilObjTest $testOBJ)
Constructor.
initCompleteQuestionList(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, $answerStatusActiveId)
getQuestionSequenceStructuredByUpdateDate(ilAssQuestionList $questionList)
load(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilTestDynamicQuestionSetFilterSelection $filterSelection)
initActualQuestionSequence(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilAssQuestionList $questionList)
buildQuestionList($sourceQuestionPoolId, $answerStatusActiveId)
initSelectionQuestionList(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilTestDynamicQuestionSetFilterSelection $filterSelection)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ChatMainBarProvider \MainMenu\Provider.