ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilMarkSchemaGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2014 ILIAS open source, Extended GPL, see docs/LICENSE */
3
10{
14 protected $object;
15
19 protected $lng;
20
24 protected $ctrl;
25
29 protected $tpl;
30
34 protected $toolbar;
35
39 public function __construct(ilMarkSchemaAware $object)
40 {
47 global $DIC;
48 $ilCtrl = $DIC['ilCtrl'];
49 $lng = $DIC['lng'];
50 $tpl = $DIC['tpl'];
51 $ilToolbar = $DIC['ilToolbar'];
52
53 $this->ctrl = $ilCtrl;
54 $this->lng = $lng;
55 $this->tpl = $tpl;
56 $this->toolbar = $ilToolbar;
57
58 $this->object = $object;
59 }
60
64 public function executeCommand()
65 {
66 global $DIC; /* @var ILIAS\DI\Container $DIC */
67
68 $DIC->tabs()->activateTab(ilTestTabsManager::TAB_ID_SETTINGS);
69
70 $cmd = $this->ctrl->getCmd('showMarkSchema');
71 $this->$cmd();
72 }
73
77 protected function ensureMarkSchemaCanBeEdited()
78 {
79 if (!$this->object->canEditMarks()) {
80 ilUtil::sendFailure($this->lng->txt('permission_denied'), true);
81 $this->ctrl->redirect($this, 'showMarkSchema');
82 }
83 }
84
88 protected function ensureEctsGradesCanBeEdited()
89 {
90 if (!$this->object->canEditEctsGrades()) {
91 ilUtil::sendFailure($this->lng->txt('permission_denied'), true);
92 $this->ctrl->redirect($this, 'showMarkSchema');
93 }
94 }
95
99 protected function addMarkStep()
100 {
102
103 $this->saveMarkSchemaFormData();
104 $this->object->getMarkSchema()->addMarkStep();
105 $this->showMarkSchema();
106 }
107
111 protected function saveMarkSchemaFormData()
112 {
113 $this->object->getMarkSchema()->flush();
114 foreach ($_POST as $key => $value) {
115 if (preg_match('/mark_short_(\d+)/', $key, $matches)) {
116 $this->object->getMarkSchema()->addMarkStep(
117 ilUtil::stripSlashes($_POST["mark_short_$matches[1]"]),
118 ilUtil::stripSlashes($_POST["mark_official_$matches[1]"]),
119 ilUtil::stripSlashes($_POST["mark_percentage_$matches[1]"]),
120 ilUtil::stripSlashes($_POST["passed_$matches[1]"])
121 );
122 }
123 }
124 }
125
129 protected function addSimpleMarkSchema()
130 {
132
133 $this->object->getMarkSchema()->createSimpleSchema(
134 $this->lng->txt('failed_short'),
135 $this->lng->txt('failed_official'),
136 0,
137 0,
138 $this->lng->txt('passed_short'),
139 $this->lng->txt('passed_official'),
140 50,
141 1
142 );
143 $this->showMarkSchema();
144 }
145
149 protected function deleteMarkSteps()
150 {
152
153 if (!isset($_POST['marks']) || !is_array($_POST['marks'])) {
154 $this->showMarkSchema();
155 return;
156 }
157
158 $this->saveMarkSchemaFormData();
159 $delete_mark_steps = array();
160 foreach ($_POST['marks'] as $mark_step_id) {
161 $delete_mark_steps[] = $mark_step_id;
162 }
163
164 if (count($delete_mark_steps)) {
165 $this->object->getMarkSchema()->deleteMarkSteps($delete_mark_steps);
166 } else {
167 ilUtil::sendInfo($this->lng->txt('tst_delete_missing_mark'));
168 }
169
170 $this->showMarkSchema();
171 }
172
176 protected function saveMarks()
177 {
179
180 try {
181 $this->saveMarkSchemaFormData();
182 $result = $this->object->checkMarks();
183 } catch (Exception $e) {
184 $result = $this->lng->txt('mark_schema_invalid');
185 }
186
187 if (is_string($result)) {
188 ilUtil::sendFailure($this->lng->txt($result), true);
189 } else {
190 $this->object->getMarkSchema()->saveToDb($this->object->getMarkSchemaForeignId());
191 $this->object->onMarkSchemaSaved();
192 ilUtil::sendSuccess($this->lng->txt('saved_successfully'), true);
193 }
194
195 $this->ctrl->redirect($this);
196 }
197
201 private function objectSupportsEctsGrades()
202 {
203 require_once 'Modules/Test/interfaces/interface.ilEctsGradesEnabled.php';
204 return $this->object instanceof ilEctsGradesEnabled;
205 }
206
211 protected function showMarkSchema(ilPropertyFormGUI $ects_form = null)
212 {
213 if (!$this->object->canEditMarks()) {
214 ilUtil::sendInfo($this->lng->txt('cannot_edit_marks'));
215 }
216
217 $this->toolbar->setFormAction($this->ctrl->getFormAction($this, 'showMarkSchema'));
218
219 require_once 'Modules/Test/classes/tables/class.ilMarkSchemaTableGUI.php';
220 $mark_schema_table = new ilMarkSchemaTableGUI($this, 'showMarkSchema', '', $this->object);
221
222 if ($this->object->canEditMarks()) {
223 require_once 'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
224 $create_simple_mark_schema_button = ilSubmitButton::getInstance();
225 $create_simple_mark_schema_button->setCaption($this->lng->txt('tst_mark_create_simple_mark_schema'), false);
226 $create_simple_mark_schema_button->setCommand('addSimpleMarkSchema');
227 $this->toolbar->addButtonInstance($create_simple_mark_schema_button);
228
229 require_once 'Services/UIComponent/Button/classes/class.ilButton.php';
230 $create_new_mark_step_button = ilButton::getInstance();
231 $create_new_mark_step_button->setCaption($this->lng->txt('tst_mark_create_new_mark_step'), false);
232 $create_new_mark_step_button->setButtonType(ilButton::BUTTON_TYPE_SUBMIT);
233 $create_new_mark_step_button->setForm('form_' . $mark_schema_table->getId());
234 $create_new_mark_step_button->setName('addMarkStep');
235 $this->toolbar->addButtonInstance($create_new_mark_step_button);
236 }
237
238
239 $content_parts = array($mark_schema_table->getHTML());
240
241 if ($this->objectSupportsEctsGrades() && $this->object->canShowEctsGrades()) {
242 if (!($ects_form instanceof ilPropertyFormGUI)) {
243 $ects_form = $this->getEctsForm();
244 $this->populateEctsForm($ects_form);
245 }
246 $content_parts[] = $ects_form->getHTML();
247 }
248
249 $this->tpl->setContent(implode('<br />', $content_parts));
250 }
251
256 {
257 $data = array();
258
259 $data['ectcs_status'] = $this->object->getECTSOutput();
260 $data['use_ects_fx'] = preg_match('/\d+/', $this->object->getECTSFX());
261 $data['ects_fx_threshold'] = $this->object->getECTSFX();
262
263 $ects_grades = $this->object->getECTSGrades();
264 for ($i = ord('a'); $i <= ord('e'); $i++) {
265 $mark = chr($i);
266 $data['ects_grade_' . $mark] = $ects_grades[chr($i - 32)];
267 }
268
269 $form->setValuesByArray($data);
270 }
271
275 protected function getEctsForm()
276 {
277 require_once 'Services/Form/classes/class.ilPropertyFormGUI.php';
278
279 $disabled = !$this->object->canEditEctsGrades();
280
281 $form = new ilPropertyFormGUI();
282 $form->setFormAction($this->ctrl->getFormAction($this, 'saveEctsForm'));
283 $form->setTitle($this->lng->txt('ects_output_of_ects_grades'));
284
285 $allow_ects_marks = new ilCheckboxInputGUI($this->lng->txt('ects_allow_ects_grades'), 'ectcs_status');
286 $allow_ects_marks->setDisabled($disabled);
287 for ($i = ord('a'); $i <= ord('e'); $i++) {
288 $mark = chr($i);
289
290 $mark_step = new ilNumberInputGUI(chr($i - 32), 'ects_grade_' . $mark);
291 $mark_step->setInfo(
292 $this->lng->txt('ects_grade_desc_prefix') . ' ' . $this->lng->txt('ects_grade_' . $mark . '_desc')
293 );
294 $mark_step->setSize(5);
295 $mark_step->allowDecimals(true);
296 $mark_step->setMinValue(0, true);
297 $mark_step->setMaxValue(100, true);
298 $mark_step->setSuffix($this->lng->txt('percentile'));
299 $mark_step->setRequired(true);
300 $mark_step->setDisabled($disabled);
301 $allow_ects_marks->addSubItem($mark_step);
302 }
303
304 $mark_step = new ilNonEditableValueGUI('F', 'ects_grade_f');
305 $mark_step->setInfo(
306 $this->lng->txt('ects_grade_desc_prefix') . ' ' . $this->lng->txt('ects_grade_f_desc')
307 );
308 $allow_ects_marks->addSubItem($mark_step);
309
310 $use_ects_fx = new ilCheckboxInputGUI($this->lng->txt('use_ects_fx'), 'use_ects_fx');
311 $use_ects_fx->setDisabled($disabled);
312 $allow_ects_marks->addSubItem($use_ects_fx);
313
314 $mark_step = new ilNonEditableValueGUI('FX', 'ects_grade_fx');
315 $mark_step->setInfo(
316 $this->lng->txt('ects_grade_desc_prefix') . ' ' . $this->lng->txt('ects_grade_fx_desc')
317 );
318 $use_ects_fx->addSubItem($mark_step);
319
320 $threshold = new ilNumberInputGUI($this->lng->txt('ects_fx_threshold'), 'ects_fx_threshold');
321 $threshold->setInfo($this->lng->txt('ects_fx_threshold_info'));
322 $threshold->setSuffix($this->lng->txt('percentile'));
323 $threshold->allowDecimals(true);
324 $threshold->setSize(5);
325 $threshold->setRequired(true);
326 $threshold->setDisabled($disabled);
327 $use_ects_fx->addSubItem($threshold);
328
329
330 $form->addItem($allow_ects_marks);
331
332 if (!$disabled) {
333 $form->addCommandButton('saveEctsForm', $this->lng->txt('save'));
334 }
335
336 return $form;
337 }
338
342 protected function saveEctsForm()
343 {
345
346 $ects_form = $this->getEctsForm();
347 if (!$ects_form->checkInput()) {
348 $ects_form->setValuesByPost();
349 $this->showMarkSchema($ects_form);
350 return;
351 }
352
353 $grades = array();
354 for ($i = ord('a'); $i <= ord('e'); $i++) {
355 $mark = chr($i);
356 $grades[chr($i - 32)] = $ects_form->getInput('ects_grade_' . $mark);
357 }
358
359 $this->object->setECTSGrades($grades);
360 $this->object->setECTSOutput((int) $ects_form->getInput('ectcs_status'));
361 $this->object->setECTSFX(
362 $ects_form->getInput('use_ects_fx') && preg_match('/\d+/', $ects_form->getInput('ects_fx_threshold')) ?
363 $ects_form->getInput('ects_fx_threshold'):
364 null
365 );
366
367 $this->object->saveECTSStatus();
368
369 ilUtil::sendSuccess($this->lng->txt('saved_successfully'));
370 $ects_form->setValuesByPost();
371 $this->showMarkSchema($ects_form);
372 }
373}
$result
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
const BUTTON_TYPE_SUBMIT
static getInstance()
This class represents a checkbox property in a property form.
executeCommand()
Controller method.
addMarkStep()
Add a new mark step to the tests marks.
populateEctsForm(ilPropertyFormGUI $form)
addSimpleMarkSchema()
Add a simple mark schema to the tests marks.
saveMarks()
Save the mark schema.
showMarkSchema(ilPropertyFormGUI $ects_form=null)
Display mark schema.
deleteMarkSteps()
Delete selected mark steps.
saveMarkSchemaFormData()
Save the mark schema POST data when the form was submitted.
This class represents a non editable value in a property form.
This class represents a number property in a property form.
This class represents a property form user interface.
static getInstance()
Factory.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
$key
Definition: croninfo.php:18
$i
Definition: disco.tpl.php:19
global $ilCtrl
Definition: ilias.php:18
if(isset($_POST['submit'])) $form
global $DIC
Definition: saml.php:7
$data
Definition: bench.php:6