ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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 $ilCtrl, $lng, $tpl, $ilToolbar;
48
49 $this->ctrl = $ilCtrl;
50 $this->lng = $lng;
51 $this->tpl = $tpl;
52 $this->toolbar = $ilToolbar;
53
54 $this->object = $object;
55 }
56
60 public function executeCommand()
61 {
62 $cmd = $this->ctrl->getCmd('showMarkSchema');
63 $this->$cmd();
64 }
65
69 protected function ensureMarkSchemaCanBeEdited()
70 {
71 if (!$this->object->canEditMarks()) {
72 ilUtil::sendFailure($this->lng->txt('permission_denied'), true);
73 $this->ctrl->redirect($this, 'showMarkSchema');
74 }
75 }
76
80 protected function ensureEctsGradesCanBeEdited()
81 {
82 if (!$this->object->canEditEctsGrades()) {
83 ilUtil::sendFailure($this->lng->txt('permission_denied'), true);
84 $this->ctrl->redirect($this, 'showMarkSchema');
85 }
86 }
87
91 protected function addMarkStep()
92 {
94
96 $this->object->getMarkSchema()->addMarkStep();
97 $this->showMarkSchema();
98 }
99
103 protected function saveMarkSchemaFormData()
104 {
105 $this->object->getMarkSchema()->flush();
106 foreach ($_POST as $key => $value) {
107 if (preg_match('/mark_short_(\d+)/', $key, $matches)) {
108 $this->object->getMarkSchema()->addMarkStep(
109 ilUtil::stripSlashes($_POST["mark_short_$matches[1]"]),
110 ilUtil::stripSlashes($_POST["mark_official_$matches[1]"]),
111 ilUtil::stripSlashes($_POST["mark_percentage_$matches[1]"]),
112 ilUtil::stripSlashes($_POST["passed_$matches[1]"])
113 );
114 }
115 }
116 }
117
121 protected function addSimpleMarkSchema()
122 {
124
125 $this->object->getMarkSchema()->createSimpleSchema(
126 $this->lng->txt('failed_short'),
127 $this->lng->txt('failed_official'),
128 0,
129 0,
130 $this->lng->txt('passed_short'),
131 $this->lng->txt('passed_official'),
132 50,
133 1
134 );
135 $this->showMarkSchema();
136 }
137
141 protected function deleteMarkSteps()
142 {
144
145 if (!isset($_POST['marks']) || !is_array($_POST['marks'])) {
146 $this->showMarkSchema();
147 return;
148 }
149
150 $this->saveMarkSchemaFormData();
151 $delete_mark_steps = array();
152 foreach ($_POST['marks'] as $mark_step_id) {
153 $delete_mark_steps[] = $mark_step_id;
154 }
155
156 if (count($delete_mark_steps)) {
157 $this->object->getMarkSchema()->deleteMarkSteps($delete_mark_steps);
158 } else {
159 ilUtil::sendInfo($this->lng->txt('tst_delete_missing_mark'));
160 }
161
162 $this->showMarkSchema();
163 }
164
168 protected function saveMarks()
169 {
171
172 try {
173 $this->saveMarkSchemaFormData();
174 $result = $this->object->checkMarks();
175 } catch (Exception $e) {
176 $result = $this->lng->txt('mark_schema_invalid');
177 }
178
179 if (is_string($result)) {
180 ilUtil::sendFailure($this->lng->txt($result), true);
181 } else {
182 $this->object->getMarkSchema()->saveToDb($this->object->getMarkSchemaForeignId());
183 $this->object->onMarkSchemaSaved();
184 ilUtil::sendSuccess($this->lng->txt('saved_successfully'), true);
185 }
186
187 $this->ctrl->redirect($this);
188 }
189
193 private function objectSupportsEctsGrades()
194 {
195 require_once 'Modules/Test/interfaces/interface.ilEctsGradesEnabled.php';
196 return $this->object instanceof ilEctsGradesEnabled;
197 }
198
203 protected function showMarkSchema(ilPropertyFormGUI $ects_form = null)
204 {
205 if (!$this->object->canEditMarks()) {
206 ilUtil::sendInfo($this->lng->txt('cannot_edit_marks'));
207 }
208
209 $this->toolbar->setFormAction($this->ctrl->getFormAction($this, 'showMarkSchema'));
210
211 require_once 'Modules/Test/classes/tables/class.ilMarkSchemaTableGUI.php';
212 $mark_schema_table = new ilMarkSchemaTableGUI($this, 'showMarkSchema', '', $this->object);
213
214 if ($this->object->canEditMarks()) {
215 require_once 'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
216 $create_simple_mark_schema_button = ilSubmitButton::getInstance();
217 $create_simple_mark_schema_button->setCaption($this->lng->txt('tst_mark_create_simple_mark_schema'), false);
218 $create_simple_mark_schema_button->setCommand('addSimpleMarkSchema');
219 $this->toolbar->addButtonInstance($create_simple_mark_schema_button);
220
221 require_once 'Services/UIComponent/Button/classes/class.ilButton.php';
222 $create_new_mark_step_button = ilButton::getInstance();
223 $create_new_mark_step_button->setCaption($this->lng->txt('tst_mark_create_new_mark_step'), false);
224 $create_new_mark_step_button->setButtonType(ilButton::BUTTON_TYPE_SUBMIT);
225 $create_new_mark_step_button->setForm('form_' . $mark_schema_table->getId());
226 $create_new_mark_step_button->setName('addMarkStep');
227 $this->toolbar->addButtonInstance($create_new_mark_step_button);
228 }
229
230
231 $content_parts = array($mark_schema_table->getHTML());
232
233 if ($this->objectSupportsEctsGrades() && $this->object->canShowEctsGrades()) {
234 if (!($ects_form instanceof ilPropertyFormGUI)) {
235 $ects_form = $this->getEctsForm();
236 $this->populateEctsForm($ects_form);
237 }
238 $content_parts[] = $ects_form->getHTML();
239 }
240
241 $this->tpl->setContent(implode('<br />', $content_parts));
242 }
243
248 {
249 $data = array();
250
251 $data['ectcs_status'] = $this->object->getECTSOutput();
252 $data['use_ects_fx'] = preg_match('/\d+/', $this->object->getECTSFX());
253 $data['ects_fx_threshold'] = $this->object->getECTSFX();
254
255 $ects_grades = $this->object->getECTSGrades();
256 for ($i = ord('a'); $i <= ord('e'); $i++) {
257 $mark = chr($i);
258 $data['ects_grade_' . $mark] = $ects_grades[chr($i - 32)];
259 }
260
261 $form->setValuesByArray($data);
262 }
263
267 protected function getEctsForm()
268 {
269 require_once 'Services/Form/classes/class.ilPropertyFormGUI.php';
270
271 $disabled = !$this->object->canEditEctsGrades();
272
273 $form = new ilPropertyFormGUI();
274 $form->setFormAction($this->ctrl->getFormAction($this, 'saveEctsForm'));
275 $form->setTitle($this->lng->txt('ects_output_of_ects_grades'));
276
277 $allow_ects_marks = new ilCheckboxInputGUI($this->lng->txt('ects_allow_ects_grades'), 'ectcs_status');
278 $allow_ects_marks->setDisabled($disabled);
279 for ($i = ord('a'); $i <= ord('e'); $i++) {
280 $mark = chr($i);
281
282 $mark_step = new ilNumberInputGUI(chr($i - 32), 'ects_grade_' . $mark);
283 $mark_step->setInfo(
284 $this->lng->txt('ects_grade_desc_prefix') . ' ' . $this->lng->txt('ects_grade_' . $mark . '_desc')
285 );
286 $mark_step->setSize(5);
287 $mark_step->allowDecimals(true);
288 $mark_step->setMinValue(0, true);
289 $mark_step->setMaxValue(100, true);
290 $mark_step->setSuffix($this->lng->txt('percentile'));
291 $mark_step->setRequired(true);
292 $mark_step->setDisabled($disabled);
293 $allow_ects_marks->addSubItem($mark_step);
294 }
295
296 $mark_step = new ilNonEditableValueGUI('F', 'ects_grade_f');
297 $mark_step->setInfo(
298 $this->lng->txt('ects_grade_desc_prefix') . ' ' . $this->lng->txt('ects_grade_f_desc')
299 );
300 $allow_ects_marks->addSubItem($mark_step);
301
302 $use_ects_fx = new ilCheckboxInputGUI($this->lng->txt('use_ects_fx'), 'use_ects_fx');
303 $use_ects_fx->setDisabled($disabled);
304 $allow_ects_marks->addSubItem($use_ects_fx);
305
306 $mark_step = new ilNonEditableValueGUI('FX', 'ects_grade_fx');
307 $mark_step->setInfo(
308 $this->lng->txt('ects_grade_desc_prefix') . ' ' . $this->lng->txt('ects_grade_fx_desc')
309 );
310 $use_ects_fx->addSubItem($mark_step);
311
312 $threshold = new ilNumberInputGUI($this->lng->txt('ects_fx_threshold'), 'ects_fx_threshold');
313 $threshold->setInfo($this->lng->txt('ects_fx_threshold_info'));
314 $threshold->setSuffix($this->lng->txt('percentile'));
315 $threshold->allowDecimals(true);
316 $threshold->setSize(5);
317 $threshold->setRequired(true);
318 $threshold->setDisabled($disabled);
319 $use_ects_fx->addSubItem($threshold);
320
321
322 $form->addItem($allow_ects_marks);
323
324 if (!$disabled) {
325 $form->addCommandButton('saveEctsForm', $this->lng->txt('save'));
326 }
327
328 return $form;
329 }
330
334 protected function saveEctsForm()
335 {
337
338 $ects_form = $this->getEctsForm();
339 if (!$ects_form->checkInput()) {
340 $ects_form->setValuesByPost();
341 $this->showMarkSchema($ects_form);
342 return;
343 }
344
345 $grades = array();
346 for ($i = ord('a'); $i <= ord('e'); $i++) {
347 $mark = chr($i);
348 $grades[chr($i - 32)] = $ects_form->getInput('ects_grade_' . $mark);
349 }
350
351 $this->object->setECTSGrades($grades);
352 $this->object->setECTSOutput((int) $ects_form->getInput('ectcs_status'));
353 $this->object->setECTSFX(
354 $ects_form->getInput('use_ects_fx') && preg_match('/\d+/', $ects_form->getInput('ects_fx_threshold')) ?
355 $ects_form->getInput('ects_fx_threshold'):
356 null
357 );
358
359 $this->object->saveECTSStatus();
360
361 ilUtil::sendSuccess($this->lng->txt('saved_successfully'));
362 $ects_form->setValuesByPost();
363 $this->showMarkSchema($ects_form);
364 }
365}
$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 sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
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