ILIAS  release_7 Revision v7.30-3-g800a261c036
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 $DIC;
41 $ilUser = $DIC['ilUser'];
42
43 $scoredPass = $this->object->_getResultPass($active_id);
44 $lastPass = ilObjTest::_getPass($active_id);
45
46 $testPercentage = 0;
47 $testReachedPoints = 0;
48 $testMaxPoints = 0;
49
50 for ($pass = 0; $pass <= $lastPass; $pass++) {
51 $passFinishDate = ilObjTest::lookupPassResultsUpdateTimestamp($active_id, $pass);
52
53 if ($passFinishDate <= 0) {
54 continue;
55 }
56
57 if (!$short) {
58 $resultData = &$this->object->getTestResult($active_id, $pass);
59
60 if (!$resultData["pass"]["total_max_points"]) {
61 $passPercentage = 0;
62 } else {
63 $passPercentage = ($resultData["pass"]["total_reached_points"] / $resultData["pass"]["total_max_points"]) * 100;
64 }
65
66 $passMaxPoints = $resultData["pass"]["total_max_points"];
67 $passReachedPoints = $resultData["pass"]["total_reached_points"];
68
69 $passAnsweredQuestions = $this->object->getAnsweredQuestionCount($active_id, $pass);
70 $passTotalQuestions = count($resultData) - 2;
71
72 if ($pass == $scoredPass) {
73 $isScoredPass = true;
74
75 if (!$resultData["test"]["total_max_points"]) {
76 $testPercentage = 0;
77 } else {
78 $testPercentage = ($resultData["test"]["total_reached_points"] / $resultData["test"]["total_max_points"]) * 100;
79 }
80
81 $testMaxPoints = $resultData["test"]["total_max_points"];
82 $testReachedPoints = $resultData["test"]["total_reached_points"];
83
84 $passOverwiewData['test'] = array(
85 'active_id' => $active_id,
86 'scored_pass' => $scoredPass,
87 'max_points' => $testMaxPoints,
88 'reached_points' => $testReachedPoints,
89 'percentage' => $testPercentage
90 );
91 } else {
92 $isScoredPass = false;
93 }
94
95 $passOverwiewData['passes'][] = array(
96 'active_id' => $active_id,
97 'pass' => $pass,
98 'finishdate' => $passFinishDate,
99 'max_points' => $passMaxPoints,
100 'reached_points' => $passReachedPoints,
101 'percentage' => $passPercentage,
102 'answered_questions' => $passAnsweredQuestions,
103 'total_questions' => $passTotalQuestions,
104 'is_scored_pass' => $isScoredPass
105 );
106 }
107 }
108
109 return $passOverwiewData;
110 }
111
120 public function getManScoringQuestionGuiList($activeId, $pass)
121 {
122 include_once "./Modules/Test/classes/class.ilObjAssessmentFolder.php";
123 $manScoringQuestionTypes = ilObjAssessmentFolder::_getManualScoring();
124
125 $testResultData = $this->object->getTestResult($activeId, $pass);
126
127 $manScoringQuestionGuiList = array();
128
129 foreach ($testResultData as $questionData) {
130 if (!isset($questionData['qid'])) {
131 continue;
132 }
133
134 if (!isset($questionData['type'])) {
135 throw new ilTestException('no question type given!');
136 }
137
138 $questionGUI = $this->object->createQuestionGUI("", $questionData['qid']);
139
140 if (!in_array($questionGUI->object->getQuestionTypeID(), $manScoringQuestionTypes)) {
141 continue;
142 }
143
144 $manScoringQuestionGuiList[ $questionData['qid'] ] = $questionGUI;
145 }
146
147 return $manScoringQuestionGuiList;
148 }
149
159 public static function isManScoringDone($activeId)
160 {
161 $assessmentSetting = new ilSetting("assessment");
162 return $assessmentSetting->get("manscoring_done_" . $activeId, false);
163 }
164
174 public static function setManScoringDone($activeId, $manScoringDone)
175 {
176 $assessmentSetting = new ilSetting("assessment");
177 $assessmentSetting->set("manscoring_done_" . $activeId, (bool) $manScoringDone);
178 }
179
180 public function buildVirtualSequence(ilTestSession $testSession)
181 {
182 global $DIC;
183 $ilDB = $DIC['ilDB'];
184 $lng = $DIC['lng'];
185 $refinery = $DIC['refinery'];
186 $ilPluginAdmin = $DIC['ilPluginAdmin'];
187
188 require_once 'Modules/Test/classes/class.ilTestVirtualSequence.php';
189 $testSequenceFactory = new ilTestSequenceFactory($ilDB, $lng, $refinery, $ilPluginAdmin, $this->object);
190
191 if ($this->object->isRandomTest()) {
192 require_once 'Modules/Test/classes/class.ilTestVirtualSequenceRandomQuestionSet.php';
193 $virtualSequence = new ilTestVirtualSequenceRandomQuestionSet($ilDB, $this->object, $testSequenceFactory);
194 } else {
195 require_once 'Modules/Test/classes/class.ilTestVirtualSequence.php';
196 $virtualSequence = new ilTestVirtualSequence($ilDB, $this->object, $testSequenceFactory);
197 }
198
199 $virtualSequence->setActiveId($testSession->getActiveId());
200
201 $virtualSequence->init();
202
203 return $virtualSequence;
204 }
205
206 public function getVirtualSequenceUserResults(ilTestVirtualSequence $virtualSequence)
207 {
208 $resultsByPass = array();
209
210 foreach ($virtualSequence->getUniquePasses() as $pass) {
211 $results = $this->object->getTestResult(
212 $virtualSequence->getActiveId(),
213 $pass,
214 false,
215 true,
216 true
217 );
218
219 $resultsByPass[$pass] = $results;
220 }
221
222 $virtualPassResults = array();
223
224 foreach ($virtualSequence->getQuestionsPassMap() as $questionId => $pass) {
225 foreach ($resultsByPass[$pass] as $key => $questionResult) {
226 if ($key === 'test' || $key === 'pass') {
227 continue;
228 }
229
230 if ($questionResult['qid'] == $questionId) {
231 $questionResult['pass'] = $pass;
232 $virtualPassResults[$questionId] = $questionResult;
233 break;
234 }
235 }
236 }
237
238 return $virtualPassResults;
239 }
240
246 public function getQuestionSummaryData(ilTestSequenceSummaryProvider $testSequence, $obligationsFilterEnabled)
247 {
248 $result_array = $testSequence->getSequenceSummary($obligationsFilterEnabled);
249
250 $marked_questions = array();
251
252 if ($this->object->getShowMarker()) {
253 include_once "./Modules/Test/classes/class.ilObjTest.php";
254 $marked_questions = ilObjTest::_getSolvedQuestions($testSequence->getActiveId());
255 }
256
257 $data = array();
258 $firstQuestion = true;
259
260 foreach ($result_array as $key => $value) {
261 $disableLink = (
262 $this->object->isFollowupQuestionAnswerFixationEnabled()
263 && !$value['presented'] && !$firstQuestion
264 );
265
266 $description = "";
267 if ($this->object->getListOfQuestionsDescription()) {
268 $description = $value["description"];
269 }
270
271 $points = "";
272 if (!$this->object->getTitleOutput()) {
273 $points = $value["points"];
274 }
275
276 $marked = false;
277 if (count($marked_questions)) {
278 if (array_key_exists($value["qid"], $marked_questions)) {
279 $obj = $marked_questions[$value["qid"]];
280 if ($obj["solved"] == 1) {
281 $marked = true;
282 }
283 }
284 }
285
286 // fau: testNav - add number parameter for getQuestionTitle()
287 $data[] = array(
288 'order' => $value["nr"],
289 'title' => $this->object->getQuestionTitle($value["title"], $value["nr"]),
290 'description' => $description,
291 'disabled' => $disableLink,
292 'worked_through' => $value["worked_through"],
293 'postponed' => $value["postponed"],
294 'points' => $points,
295 'marked' => $marked,
296 'sequence' => $value["sequence"],
297 'obligatory' => $value['obligatory'],
298 'isAnswered' => $value['isAnswered']
299 );
300
301 $firstQuestion = false;
302 // fau.
303 }
304
305 return $data;
306 }
307}
An exception for terminatinating execution or to throw for unit testing.
static _getManualScoring()
Retrieve the manual scoring settings.
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
static lookupPassResultsUpdateTimestamp($active_id, $pass)
static _getSolvedQuestions($active_id, $question_fi=null)
get solved questions
ILIAS Setting Class.
Base Exception for all Exceptions relating to Modules/Test.
Service class for tests.
getManScoringQuestionGuiList($activeId, $pass)
Returns the list of answers of a users test pass and offers a scoring option.
static setManScoringDone($activeId, $manScoringDone)
stores the flag wether manscoring is done for the given test active or not within the global settings...
__construct(ilObjTest $a_object)
@access public
getVirtualSequenceUserResults(ilTestVirtualSequence $virtualSequence)
getQuestionSummaryData(ilTestSequenceSummaryProvider $testSequence, $obligationsFilterEnabled)
getPassOverviewData($active_id, $short=false)
@access public @global ilObjUser $ilUser
static isManScoringDone($activeId)
reads the flag wether manscoring is done for the given test active or not from the global settings (s...
buildVirtualSequence(ilTestSession $testSession)
Test session handler.
global $DIC
Definition: goto.php:24
$ilUser
Definition: imgupload.php:18
getSequenceSummary($obligationsFilterEnabled=false)
$results
$lng
global $ilDB
$data
Definition: storeScorm.php:23