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 
4 require_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 
97  private function initFilteredQuestionList(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilTestDynamicQuestionSetFilterSelection $filterSelection)
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 
234  public function getActualQuestionSequence()
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 
initFilteredQuestionList(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilTestDynamicQuestionSetFilterSelection $filterSelection)
getQuestionSequenceStructuredByUpdateDate(ilAssQuestionList $questionList)
static getUsageOfObject($a_obj_id, $a_include_titles=false)
Get usage of object.
isTaxonomyFilterEnabled()
isser for taxonomie filter enabled
Administration class for plugins.
initActualQuestionSequence(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilAssQuestionList $questionList)
__construct(ilDB $db, ilLanguage $lng, ilPluginAdmin $pluginAdmin, ilObjTest $testOBJ)
Constructor.
getQuestionSequenceStructuredByTaxonomy(ilAssQuestionList $questionList, $orderingTaxId)
Database Wrapper.
Definition: class.ilDB.php:28
$path
Definition: index.php:22
language handling
getSourceQuestionPoolId()
getter for source question pool id
initCompleteQuestionList(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, $answerStatusActiveId)
load(ilObjTestDynamicQuestionSetConfig $dynamicQuestionSetConfig, ilTestDynamicQuestionSetFilterSelection $filterSelection)