ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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()) {
63  $this->addMessagePart($this->buildGradingStatusMsg());
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()) {
99  ilUtil::sendSuccess($this->getFullMessage());
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 }
__construct(ilLanguage $lng, ilObjTest $testOBJ)
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
special template class to simplify handling of ITX/PEAR
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
language handling