ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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
16{
20 private $db = null;
21
25 private $lng = null;
26
30 private $pluginAdmin = null;
31
35 private $testOBJ = null;
36
40 private $completeQuestionList = null;
41
45 private $filteredQuestionList = null;
46
50 private $actualQuestionSequence = array();
51
58 {
59 $this->db = $db;
60 $this->lng = $lng;
61 $this->pluginAdmin = $pluginAdmin;
62 $this->testOBJ = $testOBJ;
63 }
64
66
67 public function load(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilTestDynamicQuestionSetFilterSelection $filterSelection)
68 {
69 $this->completeQuestionList = $this->initCompleteQuestionList(
70 $dynamicQuestionSetConfig, $filterSelection->getAnswerStatusActiveId()
71 );
72
73 $this->filteredQuestionList = $this->initFilteredQuestionList(
74 $dynamicQuestionSetConfig, $filterSelection
75 );
76
77 $this->actualQuestionSequence = $this->initActualQuestionSequence(
78 $dynamicQuestionSetConfig, $this->filteredQuestionList
79 );
80 }
81
83
84 private function initCompleteQuestionList(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, $answerStatusActiveId)
85 {
86 $questionList = new ilAssQuestionList($this->db, $this->lng, $this->pluginAdmin);
87
88 $questionList->setParentObjId($dynamicQuestionSetConfig->getSourceQuestionPoolId());
89
90 $questionList->setAnswerStatusActiveId($answerStatusActiveId);
91
92 $questionList->load();
93
94 return $questionList;
95 }
96
98 {
99 $questionList = new ilAssQuestionList($this->db, $this->lng, $this->pluginAdmin);
100
101 $questionList->setParentObjId($dynamicQuestionSetConfig->getSourceQuestionPoolId());
102
103 $questionList->setAnswerStatusActiveId($filterSelection->getAnswerStatusActiveId());
104
105 if( $dynamicQuestionSetConfig->isAnswerStatusFilterEnabled() )
106 {
107 $questionList->setAnswerStatusFilter($filterSelection->getAnswerStatusSelection());
108 }
109
110 if( $dynamicQuestionSetConfig->isTaxonomyFilterEnabled() )
111 {
112 require_once 'Services/Taxonomy/classes/class.ilObjTaxonomy.php';
113
114 $questionList->setAvailableTaxonomyIds( ilObjTaxonomy::getUsageOfObject(
115 $dynamicQuestionSetConfig->getSourceQuestionPoolId()
116 ));
117
118 foreach($filterSelection->getTaxonomySelection() as $taxId => $taxNodes)
119 {
120 $questionList->addTaxonomyFilter(
121 $taxId, $taxNodes, $this->testOBJ->getId(), $this->testOBJ->getType()
122 );
123 }
124 }
125 elseif( $dynamicQuestionSetConfig->getOrderingTaxonomyId() )
126 {
127 $questionList->setAvailableTaxonomyIds( array(
128 $dynamicQuestionSetConfig->getOrderingTaxonomyId()
129 ));
130 }
131
132 $questionList->setForcedQuestionIds($filterSelection->getForcedQuestionIds());
133
134 $questionList->load();
135
136 return $questionList;
137 }
138
139 private function initActualQuestionSequence(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilAssQuestionList $questionList)
140 {
141 if( $dynamicQuestionSetConfig->getOrderingTaxonomyId() )
142 {
144 $questionList, $dynamicQuestionSetConfig->getOrderingTaxonomyId()
145 );
146 }
147
148 return $this->getQuestionSequenceStructuredByUpdateDate($questionList);
149 }
150
152
153 private function getQuestionSequenceStructuredByTaxonomy(ilAssQuestionList $questionList, $orderingTaxId)
154 {
155 require_once 'Services/Taxonomy/classes/class.ilObjTaxonomy.php';
156 $tax = new ilObjTaxonomy($orderingTaxId);
157
158 require_once 'Modules/Test/classes/class.ilTestTaxonomyTree.php';
159 $tree = new ilTestTaxonomyTree($orderingTaxId);
160 $tree->initOrderedTreeIndex($tax);
161
162 $questionsByNode = array();
163 $nodelessQuestions = array();
164
165 foreach($questionList->getQuestionDataArray() as $qId => $qData)
166 {
167 if( isset($qData['taxonomies'][$orderingTaxId]) && count($qData['taxonomies'][$orderingTaxId]) )
168 {
169 foreach($qData['taxonomies'][$orderingTaxId] as $nodeId => $itemData)
170 {
171 $nodeOrderingPath = $tree->getNodeOrderingPathString($itemData['node_id']);
172
173 if( !isset($questionsByNode[ $nodeOrderingPath ]) )
174 {
175 $questionsByNode[ $nodeOrderingPath ] = array();
176 }
177
178 if($tax->getItemSorting() == ilObjTaxonomy::SORT_MANUAL)
179 {
180 $questionsByNode[ $nodeOrderingPath ][$itemData['order_nr']] = $qId;
181 }
182 else
183 {
184 $questionsByNode[ $nodeOrderingPath ][$qData['title'].'::'.$qId] = $qId;
185 }
186 }
187 }
188 else
189 {
190 $nodelessQuestions[$qData['tstamp'].'::'.$qId] = $qId;
191 }
192 }
193
194 foreach($questionsByNode as $path => $questions)
195 {
196 if($tax->getItemSorting() == ilObjTaxonomy::SORT_MANUAL)
197 {
198 ksort($questions, SORT_NUMERIC);
199 }
200 else
201 {
202 ksort($questions, SORT_STRING);
203 }
204
205 $questionsByNode[$path] = array_values($questions);
206 }
207
208 ksort($questionsByNode, SORT_STRING);
209 $sequence = array_values($questionsByNode);
210
211 ksort($nodelessQuestions);
212 $sequence[] = array_values($nodelessQuestions);
213
214 return $sequence;
215 }
216
218 {
219 $sequence = array();
220
221 foreach($questionList->getQuestionDataArray() as $qId => $qData)
222 {
223 $sequence[ $qData['tstamp'].'::'.$qId ] = $qId;
224 }
225
226 ksort($sequence);
227 $sequence = array_values($sequence);
228
229 return array($sequence);
230 }
231
233
235 {
237 }
238
239 public function questionExists($questionId)
240 {
241 $questionData = $this->completeQuestionList->getQuestionDataArray();
242 return isset($questionData[$questionId]);
243 }
244
245 public function getQuestionData($questionId)
246 {
247 $questionData = $this->completeQuestionList->getQuestionDataArray();
248 return $questionData[$questionId];
249 }
250
251 public function getAllQuestionsData()
252 {
253 return $this->completeQuestionList->getQuestionDataArray();
254 }
255
257
258 public function getCompleteQuestionList()
259 {
261 }
262
263 public function getFilteredQuestionList()
264 {
266 }
267}
268
Database Wrapper.
Definition: class.ilDB.php:29
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(ilDB $db, ilLanguage $lng, ilPluginAdmin $pluginAdmin, ilObjTest $testOBJ)
Constructor.
initCompleteQuestionList(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, $answerStatusActiveId)
getQuestionSequenceStructuredByUpdateDate(ilAssQuestionList $questionList)
load(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilTestDynamicQuestionSetFilterSelection $filterSelection)
initActualQuestionSequence(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilAssQuestionList $questionList)
$path
Definition: index.php:22