ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilTestService.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
13 {
18  protected $object = null;
19 
24  public function __construct(ilObjTest $a_object)
25  {
26  $this->object = $a_object;
27  }
28 
36  public function getPassOverviewData($active_id, $short = false)
37  {
38  $passOverwiewData = array();
39 
40  global $ilUser;
41 
42  $scoredPass = $this->object->_getResultPass($active_id);
43  $lastPass = ilObjTest::_getPass($active_id);
44 
45  $testPercentage = 0;
46  $testReachedPoints = 0;
47  $testMaxPoints = 0;
48 
49  for( $pass = 0; $pass <= $lastPass; $pass++)
50  {
51  $passFinishDate = $this->object->getPassFinishDate($active_id, $pass);
52 
53  if( $passFinishDate <= 0 )
54  {
55  continue;
56  }
57 
58  if( !$short )
59  {
60  $resultData =& $this->object->getTestResult($active_id, $pass);
61 
62  if (!$resultData["pass"]["total_max_points"])
63  {
64  $passPercentage = 0;
65  }
66  else
67  {
68  $passPercentage = ($resultData["pass"]["total_reached_points"]/$resultData["pass"]["total_max_points"])*100;
69  }
70 
71  $passMaxPoints = $resultData["pass"]["total_max_points"];
72  $passReachedPoints = $resultData["pass"]["total_reached_points"];
73 
74  $passAnsweredQuestions = $this->object->getAnsweredQuestionCount($active_id, $pass);
75  $passTotalQuestions = count($resultData) - 2;
76 
77  if( $pass == $scoredPass )
78  {
79  $isScoredPass = true;
80 
81  if (!$resultData["test"]["total_max_points"])
82  {
83  $testPercentage = 0;
84  }
85  else
86  {
87  $testPercentage = ($resultData["test"]["total_reached_points"]/$resultData["test"]["total_max_points"])*100;
88  }
89 
90  $testMaxPoints = $resultData["test"]["total_max_points"];
91  $testReachedPoints = $resultData["test"]["total_reached_points"];
92 
93  $passOverwiewData['test'] = array(
94  'active_id' => $active_id,
95  'scored_pass' => $scoredPass,
96  'max_points' => $testMaxPoints,
97  'reached_points' => $testReachedPoints,
98  'percentage' => $testPercentage
99  );
100  }
101  else $isScoredPass = false;
102 
103  $passOverwiewData['passes'][] = array(
104  'active_id' => $active_id,
105  'pass' => $pass,
106  'finishdate' => $passFinishDate,
107  'max_points' => $passMaxPoints,
108  'reached_points' => $passReachedPoints,
109  'percentage' => $passPercentage,
110  'answered_questions' => $passAnsweredQuestions,
111  'total_questions' => $passTotalQuestions,
112  'is_scored_pass' => $isScoredPass
113  );
114  }
115  }
116 
117  return $passOverwiewData;
118  }
119 
128  public function getManScoringQuestionGuiList($activeId, $pass)
129  {
130  include_once "./Modules/Test/classes/class.ilObjAssessmentFolder.php";
131  $manScoringQuestionTypes = ilObjAssessmentFolder::_getManualScoring();
132 
133  $testResultData = $this->object->getTestResult($activeId, $pass);
134 
135  $manScoringQuestionGuiList = array();
136 
137  foreach($testResultData as $questionData)
138  {
139  if( !isset($questionData['qid']) )
140  {
141  continue;
142  }
143 
144  if( !isset($questionData['type']) )
145  {
146  throw new ilTestException('no question type given!');
147  }
148 
149  $questionGUI = $this->object->createQuestionGUI("", $questionData['qid']);
150 
151  if( !in_array($questionGUI->object->getQuestionTypeID(), $manScoringQuestionTypes) )
152  {
153  continue;
154  }
155 
156  $manScoringQuestionGuiList[ $questionData['qid'] ] = $questionGUI;
157  }
158 
159  return $manScoringQuestionGuiList;
160  }
161 
171  public static function isManScoringDone($activeId)
172  {
173  $assessmentSetting = new ilSetting("assessment");
174  return $assessmentSetting->get("manscoring_done_" . $activeId, false);
175  }
176 
186  public static function setManScoringDone($activeId, $manScoringDone)
187  {
188  $assessmentSetting = new ilSetting("assessment");
189  $assessmentSetting->set("manscoring_done_" . $activeId, (bool)$manScoringDone);
190  }
191 
192  public function buildVirtualSequence(ilTestSession $testSession)
193  {
194  global $ilDB, $lng, $ilPluginAdmin;
195 
196  require_once 'Modules/Test/classes/class.ilTestVirtualSequence.php';
197  $testSequenceFactory = new ilTestSequenceFactory($ilDB, $lng, $ilPluginAdmin, $this->object);
198 
199  if( $this->object->isRandomTest() )
200  {
201  require_once 'Modules/Test/classes/class.ilTestVirtualSequenceRandomQuestionSet.php';
202  $virtualSequence = new ilTestVirtualSequenceRandomQuestionSet($ilDB, $this->object, $testSequenceFactory);
203  }
204  else
205  {
206  require_once 'Modules/Test/classes/class.ilTestVirtualSequence.php';
207  $virtualSequence = new ilTestVirtualSequence($ilDB, $this->object, $testSequenceFactory);
208  }
209 
210  $virtualSequence->setActiveId($testSession->getActiveId());
211 
212  $virtualSequence->init();
213 
214  return $virtualSequence;
215  }
216 
217  public function getVirtualSequenceUserResults(ilTestVirtualSequence $virtualSequence)
218  {
219  $resultsByPass = array();
220 
221  foreach($virtualSequence->getUniquePasses() as $pass)
222  {
223  $results = $this->object->getTestResult(
224  $virtualSequence->getActiveId(), $pass, false, true, true
225  );
226 
227  $resultsByPass[$pass] = $results;
228  }
229 
230  $virtualPassResults = array();
231 
232  foreach($virtualSequence->getQuestionsPassMap() as $questionId => $pass)
233  {
234  foreach($resultsByPass[$pass] as $key => $questionResult)
235  {
236  if($key === 'test' || $key === 'pass')
237  {
238  continue;
239  }
240 
241  if($questionResult['qid'] == $questionId)
242  {
243  $questionResult['pass'] = $pass;
244  $virtualPassResults[$questionId] = $questionResult;
245  break;
246  }
247  }
248  }
249 
250  return $virtualPassResults;
251  }
252 
258  public function getQuestionSummaryData(ilTestSequenceSummaryProvider $testSequence, $obligationsFilterEnabled)
259  {
260  $result_array = $testSequence->getSequenceSummary($obligationsFilterEnabled);
261 
262  $marked_questions = array();
263 
264  if($this->object->getShowMarker())
265  {
266  include_once "./Modules/Test/classes/class.ilObjTest.php";
267  $marked_questions = ilObjTest::_getSolvedQuestions($testSequence->getActiveId());
268  }
269 
270  $data = array();
271 
272  foreach($result_array as $key => $value)
273  {
274  $description = "";
275  if($this->object->getListOfQuestionsDescription())
276  {
277  $description = $value["description"];
278  }
279 
280  $points = "";
281  if(!$this->object->getTitleOutput())
282  {
283  $points = $value["points"];
284  }
285 
286  $marked = false;
287  if(count($marked_questions))
288  {
289  if(array_key_exists($value["qid"], $marked_questions))
290  {
291  $obj = $marked_questions[$value["qid"]];
292  if($obj["solved"] == 1)
293  {
294  $marked = true;
295  }
296  }
297  }
298 
299 // fau: testNav - add number parameter for getQuestionTitle()
300  $data[] = array('order' => $value["nr"], 'title' => $this->object->getQuestionTitle($value["title"], $value["nr"]), 'description' => $description, 'worked_through' => $value["worked_through"], 'postponed' => $value["postponed"], 'points' => $points, 'marked' => $marked, 'sequence' => $value["sequence"], 'obligatory' => $value['obligatory'], 'isAnswered' => $value['isAnswered']);
301 // fau.
302  }
303 
304  return $data;
305  }
306 }
307 
getPassOverviewData($active_id, $short=false)
public ilObjUser $ilUser
ILIAS Setting Class.
static setManScoringDone($activeId, $manScoringDone)
stores the flag wether manscoring is done for the given test active or not within the global settings...
getVirtualSequenceUserResults(ilTestVirtualSequence $virtualSequence)
getQuestionSummaryData(ilTestSequenceSummaryProvider $testSequence, $obligationsFilterEnabled)
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
getSequenceSummary($obligationsFilterEnabled=false)
static isManScoringDone($activeId)
reads the flag wether manscoring is done for the given test active or not from the global settings (s...
Base Exception for all Exceptions relating to Modules/Test.
buildVirtualSequence(ilTestSession $testSession)
static _getSolvedQuestions($active_id, $question_fi=null)
get solved questions
$ilUser
Definition: imgupload.php:18
Test session handler.
getManScoringQuestionGuiList($activeId, $pass)
Returns the list of answers of a users test pass and offers a scoring option.
$results
Create styles array
The data for the language used.
__construct(ilObjTest $a_object)
public
Service class for tests.
Create new PHPExcel object
obj_idprivate
static _getManualScoring()
Retrieve the manual scoring settings.
global $lng
Definition: privfeed.php:17
global $ilDB