ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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 {
73 ilUtil::sendFailure($this->lng->txt('permission_denied'), true);
74 $this->ctrl->redirect($this, 'showMarkSchema');
75 }
76 }
77
81 protected function addMarkStep()
82 {
84
86 $this->object->getMarkSchema()->addMarkStep();
87 $this->showMarkSchema();
88 }
89
93 protected function saveMarkSchemaFormData()
94 {
95 $this->object->getMarkSchema()->flush();
96 foreach($_POST as $key => $value)
97 {
98 if(preg_match('/mark_short_(\d+)/', $key, $matches))
99 {
100 $this->object->getMarkSchema()->addMarkStep(
101 ilUtil::stripSlashes($_POST["mark_short_$matches[1]"]),
102 ilUtil::stripSlashes($_POST["mark_official_$matches[1]"]),
103 ilUtil::stripSlashes($_POST["mark_percentage_$matches[1]"]),
104 ilUtil::stripSlashes($_POST["passed_$matches[1]"])
105 );
106 }
107 }
108 }
109
113 protected function addSimpleMarkSchema()
114 {
116
117 $this->object->getMarkSchema()->createSimpleSchema(
118 $this->lng->txt('failed_short'), $this->lng->txt('failed_official'),
119 0, 0,
120 $this->lng->txt('passed_short'), $this->lng->txt('passed_official'),
121 50, 1
122 );
123 $this->showMarkSchema();
124 }
125
129 protected function deleteMarkSteps()
130 {
132
133 if(!isset($_POST['marks']) || !is_array($_POST['marks']))
134 {
135 $this->showMarkSchema();
136 return;
137 }
138
139 $this->saveMarkSchemaFormData();
140 $delete_mark_steps = array();
141 foreach($_POST['marks'] as $mark_step_id)
142 {
143 $delete_mark_steps[] = $mark_step_id;
144 }
145
146 if(count($delete_mark_steps))
147 {
148 $this->object->getMarkSchema()->deleteMarkSteps($delete_mark_steps);
149 }
150 else
151 {
152 ilUtil::sendInfo($this->lng->txt('tst_delete_missing_mark'));
153 }
154
155 $this->showMarkSchema();
156 }
157
161 protected function saveMarks()
162 {
164
165 try
166 {
167 $this->saveMarkSchemaFormData();
168 $result = $this->object->checkMarks();
169 }
170 catch(Exception $e)
171 {
172 $result = $this->lng->txt('mark_schema_invalid');
173 }
174
175 if(is_string($result))
176 {
177 ilUtil::sendFailure($this->lng->txt($result), true);
178 }
179 else
180 {
181 $this->object->getMarkSchema()->saveToDb($this->object->getMarkSchemaForeignId());
182 $this->object->onMarkSchemaSaved();
183 ilUtil::sendSuccess($this->lng->txt('saved_successfully'), true);
184 }
185
186 $this->ctrl->redirect($this);
187 }
188
192 private function objectSupportsEctsGrades()
193 {
194 require_once 'Modules/Test/interfaces/interface.ilEctsGradesEnabled.php';
195 return $this->object instanceof ilEctsGradesEnabled;
196 }
197
202 protected function showMarkSchema(ilPropertyFormGUI $ects_form = null)
203 {
204 if(!$this->object->canEditMarks())
205 {
206 ilUtil::sendInfo($this->lng->txt('cannot_edit_marks'));
207 }
208
209 $this->toolbar->setFormAction($this->ctrl->getFormAction($this, 'showMarkSchema'));
210
211 if($this->object->canEditMarks())
212 {
213 require_once 'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
214 $create_simple_mark_schema_button = ilSubmitButton::getInstance();
215 $create_simple_mark_schema_button->setCaption($this->lng->txt('tst_mark_create_simple_mark_schema'), false);
216 $create_simple_mark_schema_button->setCommand('addSimpleMarkSchema');
217 $this->toolbar->addButtonInstance($create_simple_mark_schema_button);
218 }
219
220 require_once 'Modules/Test/classes/tables/class.ilMarkSchemaTableGUI.php';
221 $mark_schema_table = new ilMarkSchemaTableGUI($this, 'showMarkSchema', '', $this->object);
222
223 $content_parts = array($mark_schema_table->getHTML());
224
225 if($this->objectSupportsEctsGrades() && $this->object->canEditEctsGrades())
226 {
227 if(!($ects_form instanceof ilPropertyFormGUI))
228 {
229 $ects_form = $this->getEctsForm();
230 $this->populateEctsForm($ects_form);
231 }
232 $content_parts[] = $ects_form->getHTML();
233 }
234
235 $this->tpl->setContent(implode('<br />', $content_parts));
236 }
237
241 protected function populateEctsForm(ilPropertyFormGUI $form)
242 {
243 $data = array();
244
245 $data['ectcs_status'] = $this->object->getECTSOutput();
246 $data['use_ects_fx'] = preg_match('/\d+/', $this->object->getECTSFX());
247 $data['ects_fx_threshold'] = $this->object->getECTSFX();
248
249 $ects_grades = $this->object->getECTSGrades();
250 for($i = ord('a'); $i <= ord('e'); $i++)
251 {
252 $mark = chr($i);
253 $data['ects_grade_' . $mark] = $ects_grades[chr($i - 32)];
254 }
255
256 $form->setValuesByArray($data);
257 }
258
262 protected function getEctsForm()
263 {
264 require_once 'Services/Form/classes/class.ilPropertyFormGUI.php';
265
266 $form = new ilPropertyFormGUI();
267 $form->setFormAction($this->ctrl->getFormAction($this, 'saveEctsForm'));
268 $form->addCommandButton('saveEctsForm', $this->lng->txt('save'));
269 $form->setTitle($this->lng->txt('ects_output_of_ects_grades'));
270
271 $allow_ects_marks = new ilCheckboxInputGUI($this->lng->txt('ects_allow_ects_grades'), 'ectcs_status');
272 for($i = ord('a'); $i <= ord('e'); $i++)
273 {
274 $mark = chr($i);
275
276 $mark_step = new ilNumberInputGUI(chr($i - 32), 'ects_grade_' . $mark);
277 $mark_step->setInfo(
278 $this->lng->txt('ects_grade_desc_prefix') . ' ' . $this->lng->txt('ects_grade_' . $mark . '_desc')
279 );
280 $mark_step->setSize(5);
281 $mark_step->allowDecimals(true);
282 $mark_step->setMinValue(0, true);
283 $mark_step->setMaxValue(100, true);
284 $mark_step->setSuffix($this->lng->txt('percentile'));
285 $mark_step->setRequired(true);
286 $allow_ects_marks->addSubItem($mark_step);
287 }
288
289 $mark_step = new ilNonEditableValueGUI('F', 'ects_grade_f');
290 $mark_step->setInfo(
291 $this->lng->txt('ects_grade_desc_prefix') . ' ' . $this->lng->txt('ects_grade_f_desc')
292 );
293 $allow_ects_marks->addSubItem($mark_step);
294
295 $use_ects_fx = new ilCheckboxInputGUI($this->lng->txt('use_ects_fx'), 'use_ects_fx');
296 $allow_ects_marks->addSubItem($use_ects_fx);
297
298 $mark_step = new ilNonEditableValueGUI('FX', 'ects_grade_fx');
299 $mark_step->setInfo(
300 $this->lng->txt('ects_grade_desc_prefix') . ' ' . $this->lng->txt('ects_grade_fx_desc')
301 );
302 $use_ects_fx->addSubItem($mark_step);
303
304 $threshold = new ilNumberInputGUI($this->lng->txt('ects_fx_threshold'), 'ects_fx_threshold');
305 $threshold->setInfo($this->lng->txt('ects_fx_threshold_info'));
306 $threshold->setSuffix($this->lng->txt('percentile'));
307 $threshold->allowDecimals(true);
308 $threshold->setSize(5);
309 $threshold->setRequired(true);
310 $use_ects_fx->addSubItem($threshold);
311
312
313 $form->addItem($allow_ects_marks);
314
315 return $form;
316 }
317
321 protected function saveEctsForm()
322 {
323 if(!$this->objectSupportsEctsGrades() && $this->object->canEditEctsGrades())
324 {
325 $this->showMarkSchema();
326 return;
327 }
328
329 $ects_form = $this->getEctsForm();
330 if(!$ects_form->checkInput())
331 {
332 $ects_form->setValuesByPost();
333 $this->showMarkSchema($ects_form);
334 return;
335 }
336
337 $grades = array();
338 for($i = ord('a'); $i <= ord('e'); $i++)
339 {
340 $mark = chr($i);
341 $grades[chr($i - 32)] = $ects_form->getInput('ects_grade_' . $mark);
342 }
343
344 $this->object->setECTSGrades($grades);
345 $this->object->setECTSOutput((int)$ects_form->getInput('ectcs_status'));
346 $this->object->setECTSFX(
347 $ects_form->getInput('use_ects_fx') && preg_match('/\d+/', $ects_form->getInput('ects_fx_threshold')) ?
348 $ects_form->getInput('ects_fx_threshold'):
349 NULL
350 );
351
352 $this->object->saveECTSStatus();
353
354 ilUtil::sendSuccess($this->lng->txt('saved_successfully'));
355 $ects_form->setValuesByPost();
356 $this->showMarkSchema($ects_form);
357 }
358}
$result
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.
setValuesByArray($a_values, $a_restrict_to_value_keys=false)
Set form values from an array.
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.
$_POST['username']
Definition: cron.php:12
$data
global $ilCtrl
Definition: ilias.php:18
$cmd
Definition: sahs_server.php:35