ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilTestGradingMessageBuilder.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
12{
16 private $lng;
17
21 private $testOBJ;
22
26 private $tpl;
27
31 private $resultData;
32
36 private $activeId;
37
43 {
44 $this->lng = $lng;
45 $this->testOBJ = $testOBJ;
46 }
47
48 public function setActiveId($activeId)
49 {
50 $this->activeId = $activeId;
51 }
52
53 public function getActiveId()
54 {
55 return $this->activeId;
56 }
57
58 public function buildMessage()
59 {
60 $this->loadResultData();
61
62 if ($this->testOBJ->isShowGradingStatusEnabled()) {
64 }
65
66 if ($this->testOBJ->areObligationsEnabled()) {
67 $this->addMessagePart($this->buildObligationsMsg());
68 }
69
70 if ($this->testOBJ->isShowGradingMarkEnabled()) {
71 $this->addMessagePart($this->buildGradingMarkMsg());
72 }
73
74 if ($this->testOBJ->getECTSOutput()) {
75 $this->addMessagePart($this->buildEctsGradeMsg());
76 }
77 }
78
79 private function addMessagePart($msgPart)
80 {
81 $this->messageText[] = $msgPart;
82 }
83
84 private function getFullMessage()
85 {
86 return implode(' ', $this->messageText);
87 }
88
89 private function isPassed()
90 {
91 return (bool) $this->resultData['passed'];
92 }
93
94 public function sendMessage()
95 {
96 if (!$this->testOBJ->isShowGradingStatusEnabled()) {
98 } elseif ($this->isPassed()) {
100 } else {
102 }
103 }
104
105 private function loadResultData()
106 {
107 $this->resultData = $this->testOBJ->getResultsForActiveId($this->getActiveId());
108
109 if ($this->testOBJ->getECTSOutput()) {
110 $ectsMark = $this->testOBJ->getECTSGrade(
111 $this->testOBJ->getTotalPointsPassedArray(),
112 $this->resultData['reached_points'],
113 $this->resultData['max_points']
114 );
115
116 $this->resultData['ects_grade'] = strtoupper($ectsMark);
117 }
118 }
119
120 private function buildGradingStatusMsg()
121 {
122 if ($this->isPassed()) {
123 return $this->lng->txt('grading_status_passed_msg');
124 }
125
126 return $this->lng->txt('grading_status_failed_msg');
127 }
128
129 private function buildGradingMarkMsg()
130 {
131 $markMsg = $this->lng->txt('grading_mark_msg');
132
133 $markMsg = str_replace("[mark]", $this->getMarkOfficial(), $markMsg);
134 $markMsg = str_replace("[markshort]", $this->getMarkShort(), $markMsg);
135 $markMsg = str_replace("[percentage]", $this->getPercentage(), $markMsg);
136 $markMsg = str_replace("[reached]", $this->getReachedPoints(), $markMsg);
137 $markMsg = str_replace("[max]", $this->getMaxPoints(), $markMsg);
138
139 return $markMsg;
140 }
141
142 private function getMarkOfficial()
143 {
144 return $this->resultData['mark_official'];
145 }
146
147 private function getMarkShort()
148 {
149 return $this->resultData['mark_short'];
150 }
151
152 private function getPercentage()
153 {
154 $percentage = 0;
155
156 if ($this->getMaxPoints() > 0) {
157 $percentage = $this->getReachedPoints() / $this->getMaxPoints();
158 }
159
160 return sprintf("%.2f", $percentage);
161 }
162
163 private function getReachedPoints()
164 {
165 return $this->resultData['reached_points'];
166 }
167
168 private function getMaxPoints()
169 {
170 return $this->resultData['max_points'];
171 }
172
173 private function buildObligationsMsg()
174 {
175 if ($this->areObligationsAnswered()) {
176 return $this->lng->txt('grading_obligations_answered_msg');
177 }
178
179 return $this->lng->txt('grading_obligations_missing_msg');
180 }
181
182 private function areObligationsAnswered()
183 {
184 return (bool) $this->resultData['obligations_answered'];
185 }
186
187 private function buildEctsGradeMsg()
188 {
189 return str_replace('[markects]', $this->getEctsGrade(), $this->lng->txt('mark_tst_ects'));
190 }
191
192 private function getEctsGrade()
193 {
194 return $this->resultData['ects_grade'];
195 }
196
197 public function buildList()
198 {
199 $this->loadResultData();
200
201 $this->initListTemplate();
202
203 if ($this->testOBJ->isShowGradingStatusEnabled()) {
204 $passedStatusLangVar = $this->isPassed() ? 'passed_official' : 'failed_official';
205
206 $this->populateListEntry(
207 $this->lng->txt('passed_status'),
208 $this->lng->txt($passedStatusLangVar)
209 );
210 }
211
212 if ($this->testOBJ->areObligationsEnabled()) {
213 if ($this->areObligationsAnswered()) {
214 $obligAnsweredStatusLangVar = 'grading_obligations_answered_listentry';
215 } else {
216 $obligAnsweredStatusLangVar = 'grading_obligations_missing_listentry';
217 }
218
219 $this->populateListEntry(
220 $this->lng->txt('grading_obligations_listlabel'),
221 $this->lng->txt($obligAnsweredStatusLangVar)
222 );
223 }
224
225 if ($this->testOBJ->isShowGradingMarkEnabled()) {
226 $this->populateListEntry($this->lng->txt('tst_mark'), $this->getMarkOfficial());
227 }
228
229 if ($this->testOBJ->getECTSOutput()) {
230 $this->populateListEntry($this->lng->txt('ects_grade'), $this->getEctsGrade());
231 }
232
233 $this->parseListTemplate();
234 }
235
236 public function initListTemplate()
237 {
238 $this->tpl = new ilTemplate('tpl.tst_grading_msg_list.html', true, true, 'Modules/Test');
239 }
240
241 private function populateListEntry($label, $value)
242 {
243 $this->tpl->setCurrentBlock('grading_msg_entry');
244 $this->tpl->setVariable('LABEL', $label);
245 $this->tpl->setVariable('VALUE', $value);
246 $this->tpl->parseCurrentBlock();
247 }
248
249 private function parseListTemplate()
250 {
251 $this->tpl->setCurrentBlock('grading_msg_list');
252 $this->tpl->parseCurrentBlock();
253 }
254
255 public function getList()
256 {
257 return $this->tpl->get();
258 }
259}
sprintf('%.4f', $callTime)
An exception for terminatinating execution or to throw for unit testing.
language handling
special template class to simplify handling of ITX/PEAR
__construct(ilLanguage $lng, ilObjTest $testOBJ)
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.