ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5
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 
85  $this->saveMarkSchemaFormData();
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 }
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
$_POST['username']
Definition: cron.php:12
$result
executeCommand()
Controller method.
This class represents a property form user interface.
deleteMarkSteps()
Delete selected mark steps.
$cmd
Definition: sahs_server.php:35
saveMarkSchemaFormData()
Save the mark schema POST data when the form was submitted.
This class represents a checkbox property in a property form.
addMarkStep()
Add a new mark step to the tests marks.
global $ilCtrl
Definition: ilias.php:18
setInfo($a_info)
Set Information Text.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
showMarkSchema(ilPropertyFormGUI $ects_form=null)
Display mark schema.
$data
This class represents a number property in a property form.
addSimpleMarkSchema()
Add a simple mark schema to the tests marks.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
saveMarks()
Save the mark schema.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
populateEctsForm(ilPropertyFormGUI $form)
This class represents a non editable value in a property form.
setValuesByArray($a_values, $a_restrict_to_value_keys=false)
Set form values from an array.