ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilObjTestSettingsGeneralGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once 'Modules/Test/classes/class.ilTestSettingsGUI.php';
5require_once 'Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php';
6
21{
25 const CMD_SHOW_FORM = 'showForm';
26 const CMD_SAVE_FORM = 'saveForm';
27 const CMD_CONFIRMED_SAVE_FORM = 'confirmedSaveForm';
28 const CMD_SHOW_RESET_TPL_CONFIRM = 'showResetTemplateConfirmation';
29 const CMD_CONFIRMED_RESET_TPL = 'confirmedResetTemplate';
30
31 const ANSWER_FIXATION_NONE = 'none';
32 const ANSWER_FIXATION_ON_INSTANT_FEEDBACK = 'instant_feedback';
33 const ANSWER_FIXATION_ON_FOLLOWUP_QUESTION = 'followup_question';
34 const ANSWER_FIXATION_ON_IFB_OR_FUQST = 'ifb_or_fuqst';
35
38
40 protected $ctrl = null;
41
43 protected $access = null;
44
46 protected $lng = null;
47
49 protected $tpl = null;
50
52 protected $tree = null;
53
55 protected $db = null;
56
58 protected $pluginAdmin = null;
59
61 protected $activeUser = null;
62
64 protected $testGUI = null;
65
68
81 public function __construct(
90 ) {
91 global $DIC; /* @var ILIAS\DI\Container $DIC */
92
93 $this->ctrl = $ctrl;
94 $this->access = $access;
95 $this->lng = $lng;
96 $this->tpl = $DIC->ui()->mainTemplate();
97 $this->tree = $tree;
98 $this->db = $db;
99 $this->pluginAdmin = $pluginAdmin;
100 $this->activeUser = $activeUser;
101
102 $this->testGUI = $testGUI;
103
104 require_once 'Modules/Test/classes/class.ilTestQuestionSetConfigFactory.php';
105 $this->testQuestionSetConfigFactory = new ilTestQuestionSetConfigFactory($this->tree, $this->db, $this->pluginAdmin, $testGUI->object);
106
108 }
109
113 public function executeCommand()
114 {
115 global $DIC; /* @var ILIAS\DI\Container $DIC */
116
117 // allow only write access
118
119 if (!$this->access->checkAccess("write", "", $this->testGUI->ref_id)) {
120 ilUtil::sendInfo($this->lng->txt("cannot_edit_test"), true);
121 $this->ctrl->redirect($this->testGUI, "infoScreen");
122 }
123
124 $DIC->tabs()->activateTab(ilTestTabsManager::TAB_ID_SETTINGS);
125
126 // process command
127
128 $nextClass = $this->ctrl->getNextClass();
129
130 switch ($nextClass) {
131 default:
132 $cmd = $this->ctrl->getCmd(self::CMD_SHOW_FORM) . 'Cmd';
133 $this->$cmd();
134 }
135 }
136
137 private function showFormCmd(ilPropertyFormGUI $form = null)
138 {
139 $this->tpl->addJavascript("./Services/JavaScript/js/Basic.js");
140
141 if ($form === null) {
142 $form = $this->buildForm();
143 }
144
145 $formHTML = $this->ctrl->getHTML($form);
146 $msgHTML = $this->getSettingsTemplateMessageHTML();
147
148 $this->tpl->setContent($formHTML . $msgHTML);
149 }
150
151 private function showConfirmation(ilPropertyFormGUI $form, $oldQuestionSetType, $newQuestionSetType, $hasQuestionsWithoutQuestionpool)
152 {
153 require_once 'Modules/Test/classes/confirmations/class.ilTestSettingsChangeConfirmationGUI.php';
154 $confirmation = new ilTestSettingsChangeConfirmationGUI($this->lng, $this->testOBJ);
155
156 $confirmation->setFormAction($this->ctrl->getFormAction($this));
157 $confirmation->setCancel($this->lng->txt('cancel'), self::CMD_SHOW_FORM);
158 $confirmation->setConfirm($this->lng->txt('confirm'), self::CMD_CONFIRMED_SAVE_FORM);
159
160 $confirmation->setOldQuestionSetType($oldQuestionSetType);
161 $confirmation->setNewQuestionSetType($newQuestionSetType);
162 $confirmation->setQuestionLossInfoEnabled($hasQuestionsWithoutQuestionpool);
163 $confirmation->build();
164
165 $confirmation->populateParametersFromPropertyForm($form, $this->activeUser->getTimeZone());
166
167 $this->tpl->setContent($this->ctrl->getHTML($confirmation));
168 }
169
171 {
172 if ($this->settingsTemplate) {
173 $title = $this->settingsTemplate->getTitle();
174
175 if ($this->settingsTemplate->getAutoGenerated()) {
176 $title = $this->lng->txt($title);
177 }
178
179 global $DIC;
180 $tpl = $DIC['tpl'];
181
182 $link = $this->ctrl->getLinkTarget($this, self::CMD_SHOW_RESET_TPL_CONFIRM);
183 $link = "<a href=\"" . $link . "\">" . $this->lng->txt("test_using_template_link") . "</a>";
184
186 sprintf($this->lng->txt("test_using_template"), $title, $link),
187 "info"
188 );
189
190 $msgHTML = "<div style=\"margin-top:10px\">$msgHTML</div>";
191 } else {
192 $msgHTML = '';
193 }
194
195 return $msgHTML;
196 }
197
198 private function confirmedSaveFormCmd()
199 {
200 return $this->saveFormCmd(true);
201 }
202
203 private function saveFormCmd($isConfirmedSave = false)
204 {
205 $form = $this->buildForm();
206
207 // form validation and initialisation
208
209 if ($isConfirmedSave) {
210 // since confirmation does only pickup POST and no FILES
211 // mocking the tile image file upload field is neccessary
212 // due to checkInput() behaviour (fixes mantis #24226)
213 $_FILES['tile_image'] = array(
214 'name' => '', 'type' => '', 'size' => '', 'tmp_name' => '', 'error' => ''
215 );
216
217 // TODO: get rid of question selection mode setting in settings form (move to creation screen)
218 }
219
220 $errors = !$form->checkInput(); // ALWAYS CALL BEFORE setValuesByPost()
221 $form->setValuesByPost(); // NEVER CALL THIS BEFORE checkInput()
222 // Sarcasm? No. Because checkInput checks the form graph against the POST without
223 // actually setting the values into the form. Sounds ridiculous? Indeed, and it is.
224
225 // return to form when any form validation errors exist
226
227 if ($errors) {
228 ilUtil::sendFailure($this->lng->txt('form_input_not_valid'));
229 return $this->showFormCmd($form);
230 }
231
232 // return to form when online is to be set, but no questions are configured
233
234 $currentQuestionSetConfig = $this->testQuestionSetConfigFactory->getQuestionSetConfig();
235 if ($form->getItemByPostVar('online')->getChecked() && !$this->testOBJ->isComplete($currentQuestionSetConfig)) {
236 $form->getItemByPostVar('online')->setAlert(
237 $this->lng->txt("cannot_switch_to_online_no_questions_andor_no_mark_steps")
238 );
239
240 ilUtil::sendFailure($this->lng->txt('form_input_not_valid'));
241 return $this->showFormCmd($form);
242 }
243
244 // avoid settings conflict "ctm" and "do not show question titles"
245
246 $qstSetSetting = $form->getItemByPostVar('question_set_type');
247 $qTitleSetting = $form->getItemByPostVar('title_output');
248
249 if ($qstSetSetting->getValue() == ilObjTest::QUESTION_SET_TYPE_DYNAMIC && $qTitleSetting->getValue() == 2) {
250 $qstSetSetting->setAlert($this->lng->txt('tst_conflicting_setting'));
251 $qTitleSetting->setAlert($this->lng->txt('tst_conflicting_setting'));
252
253 ilUtil::sendFailure($this->lng->txt('tst_settings_conflict_message'));
254 return $this->showFormCmd($form);
255 }
256
257 // avoid settings conflict "obligate questions" and "freeze answer"
258
259 $obligationsSetting = $form->getItemByPostVar('obligations_enabled');
260 $answerFixationSetting = $form->getItemByPostVar('answer_fixation_handling');
261
262 if ($obligationsSetting->getChecked() && $answerFixationSetting->getValue() != self::ANSWER_FIXATION_NONE) {
263 $obligationsSetting->setAlert($this->lng->txt('tst_conflicting_setting'));
264 $answerFixationSetting->setAlert($this->lng->txt('tst_conflicting_setting'));
265
266 ilUtil::sendFailure($this->lng->txt('tst_settings_conflict_message'));
267 return $this->showFormCmd($form);
268 }
269
270 // avoid settings conflict "freeze answer on followup question" and "question postponing"
271
272 $postponeSetting = $form->getItemByPostVar('postpone');
273 $answerFixationSetting = $form->getItemByPostVar('answer_fixation_handling');
274 $conflictModes = array(self::ANSWER_FIXATION_ON_FOLLOWUP_QUESTION, self::ANSWER_FIXATION_ON_IFB_OR_FUQST);
275
276 if ($postponeSetting->getValue() && in_array($answerFixationSetting->getValue(), $conflictModes)) {
277 $postponeSetting->setAlert($this->lng->txt('tst_conflicting_setting'));
278 $answerFixationSetting->setAlert($this->lng->txt('tst_conflicting_setting'));
279
280 ilUtil::sendFailure($this->lng->txt('tst_settings_conflict_message'));
281 return $this->showFormCmd($form);
282 }
283
284 // avoid settings conflict "freeze answer on followup question" and "question shuffling"
285
286 $shuffleSetting = $form->getItemByPostVar('chb_shuffle_questions');
287 $answerFixationSetting = $form->getItemByPostVar('answer_fixation_handling');
288 $conflictModes = array(self::ANSWER_FIXATION_ON_FOLLOWUP_QUESTION, self::ANSWER_FIXATION_ON_IFB_OR_FUQST);
289
290 if ($shuffleSetting->getChecked() && in_array($answerFixationSetting->getValue(), $conflictModes)) {
291 $shuffleSetting->setAlert($this->lng->txt('tst_conflicting_setting'));
292 $answerFixationSetting->setAlert($this->lng->txt('tst_conflicting_setting'));
293
294 ilUtil::sendFailure($this->lng->txt('tst_settings_conflict_message'));
295 return $this->showFormCmd($form);
296 }
297
298 $infoMsg = array();
299
300 // solve conflicts with question set type setting with confirmation screen if required
301 // determine wether question set type relating data is to be removed (questions/pools)
302
303 $questionSetTypeRelatingDataCleanupRequired = false;
304
305 $oldQuestionSetType = $this->testOBJ->getQuestionSetType();
306 if ($form->getItemByPostVar('question_set_type') instanceof ilFormPropertyGUI) {
307 $newQuestionSetType = $form->getItemByPostVar('question_set_type')->getValue();
308
309 if (!$this->testOBJ->participantDataExist() && $newQuestionSetType != $oldQuestionSetType) {
310 $oldQuestionSetConfig = $this->testQuestionSetConfigFactory->getQuestionSetConfigByType(
311 $oldQuestionSetType
312 );
313
314 if ($oldQuestionSetConfig->doesQuestionSetRelatedDataExist()) {
315 if (!$isConfirmedSave) {
316 if ($oldQuestionSetType == ilObjTest::QUESTION_SET_TYPE_FIXED) {
317 return $this->showConfirmation(
318 $form,
319 $oldQuestionSetType,
320 $newQuestionSetType,
321 $this->testOBJ->hasQuestionsWithoutQuestionpool()
322 );
323 }
324
325 return $this->showConfirmation(
326 $form,
327 $oldQuestionSetType,
328 $newQuestionSetType,
329 false
330 );
331 }
332
333 $questionSetTypeRelatingDataCleanupRequired = true;
334 }
335
336 if ($form->getItemByPostVar('online')->getChecked()) {
337 $form->getItemByPostVar('online')->setChecked(false);
338
339 if (!$this->testOBJ->getOfflineStatus()) {
340 $infoMsg[] = $this->lng->txt("tst_set_offline_due_to_switched_question_set_type_setting");
341 } else {
342 $infoMsg[] = $this->lng->txt("tst_cannot_online_due_to_switched_quest_set_type_setting");
343 }
344 }
345 }
346 } else {
347 $newQuestionSetType = $oldQuestionSetType;
348 }
349
350 // adjust settings due to chosen question set type
351
352 if ($newQuestionSetType != ilObjTest::QUESTION_SET_TYPE_FIXED) {
353 $form->getItemByPostVar('chb_use_previous_answers')->setChecked(false);
354 }
355
356 // perform saving the form data
357
358 $this->performSaveForm($form);
359
360 // clean up test mode relating configuration data (questions/questionpools)
361
362 if ($questionSetTypeRelatingDataCleanupRequired) {
363 $oldQuestionSetConfig->removeQuestionSetRelatedData();
364 }
365
366 // disinvite all invited users if required
367
368 if (!$this->testOBJ->participantDataExist() && !$this->testOBJ->getFixedParticipants()) {
369 foreach ($this->testOBJ->getInvitedUsers() as $usrId => $usrData) {
370 $this->testOBJ->disinviteUser($usrId);
371 }
372 }
373
374 // redirect to form output
375
376 if (count($infoMsg)) {
377 ilUtil::sendInfo(implode('<br />', $infoMsg), true);
378 }
379
380 ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"), true);
381 $this->ctrl->redirect($this, self::CMD_SHOW_FORM);
382 }
383
388 {
389 require_once 'Services/Utilities/classes/class.ilConfirmationGUI.php';
390 $confirmationGUI = new ilConfirmationGUI();
391
392 $confirmationGUI->setFormAction($this->ctrl->getFormAction($this));
393 $confirmationGUI->setHeaderText($this->lng->txt("test_confirm_template_reset"));
394 $confirmationGUI->setCancel($this->lng->txt('cancel'), self::CMD_SHOW_FORM);
395 $confirmationGUI->setConfirm($this->lng->txt('confirm'), self::CMD_CONFIRMED_RESET_TPL);
396
397 $this->tpl->setContent($this->ctrl->getHTML($confirmationGUI));
398 }
399
403 private function confirmedResetTemplateCmd()
404 {
405 $this->testOBJ->setTemplate(null);
406 $this->testOBJ->saveToDB();
407
408 ilUtil::sendSuccess($this->lng->txt("test_template_reset"), true);
409 $this->ctrl->redirect($this, self::CMD_SHOW_FORM);
410 }
411
413 {
414 if (!($form->getItemByPostVar('skill_service') instanceof ilFormPropertyGUI)) {
415 return false;
416 }
417
419 return false;
420 }
421
422 if (!$form->getItemByPostVar('skill_service')->getChecked()) {
423 return false;
424 }
425
426 return true;
427 }
428
430 {
431 global $DIC;
432 $ilSetting = $DIC['ilSetting'];
433
434 return $ilSetting->get('char_selector_availability') > 0;
435 }
436
437
438 private function buildForm()
439 {
440 require_once 'Services/Form/classes/class.ilPropertyFormGUI.php';
441 $form = new ilPropertyFormGUI();
442 $form->setFormAction($this->ctrl->getFormAction($this));
443 $form->addCommandButton(self::CMD_SAVE_FORM, $this->lng->txt("save"));
444 $form->setTableWidth("100%");
445 $form->setId("test_properties");
446
447 $this->addGeneralProperties($form);
448 $this->addAvailabilityProperties($form);
449 $this->addPresentationProperties($form);
450 $this->addTestIntroProperties($form);
451 $this->addTestAccessProperties($form);
452 $this->addTestRunProperties($form);
453 $this->addQuestionBehaviourProperties($form);
454 $this->addTestSequenceProperties($form);
455 $this->addTestFinishProperties($form);
456
457 // Edit ecs export settings
458 include_once 'Modules/Test/classes/class.ilECSTestSettings.php';
459 $ecs = new ilECSTestSettings($this->testOBJ);
460 $ecs->addSettingsToForm($form, 'tst');
461
462 // additional features
463
464 $orgunitServiceActive = ilOrgUnitGlobalSettings::getInstance()->getObjectPositionSettingsByType(
465 $this->testOBJ->getType()
466 )->isActive();
467
468 $skillServiceActive = ilObjTest::isSkillManagementGloballyActivated();
469
470
471 if ($orgunitServiceActive || $skillServiceActive) {
472 $otherHead = new ilFormSectionHeaderGUI();
473 $otherHead->setTitle($this->lng->txt('obj_features'));
474 $form->addItem($otherHead);
475 }
476
477 require_once 'Services/Object/classes/class.ilObjectServiceSettingsGUI.php';
478 ilObjectServiceSettingsGUI::initServiceSettingsForm($this->testOBJ->getId(), $form, array(
480 ));
481
482 // skill service activation for FIXED tests only
483 if ($skillServiceActive) {
484 $skillService = new ilCheckboxInputGUI($this->lng->txt('tst_activate_skill_service'), 'skill_service');
485 $skillService->setInfo($this->lng->txt('tst_activate_skill_service_desc'));
486 $skillService->setChecked($this->testOBJ->isSkillServiceEnabled());
487 if ($this->testOBJ->participantDataExist()) {
488 $skillService->setDisabled(true);
489 }
490 $form->addItem($skillService);
491 }
492
493 // remove items when using template
494 $this->removeHiddenItems($form);
495
496 return $form;
497 }
498
499 private function performSaveForm(ilPropertyFormGUI $form)
500 {
501 $this->saveGeneralProperties($form);
502 $this->savePresentationProperties($form);
503 $this->saveAvailabilityProperties($form);
504 $this->saveTestIntroProperties($form);
505 $this->saveTestAccessProperties($form);
506 $this->saveTestRunProperties($form);
508 $this->saveTestSequenceSettings($form);
509 $this->saveTestFinishProperties($form);
510
511 if (!$this->testOBJ->participantDataExist()) {
512 // skill service
513 if (ilObjTest::isSkillManagementGloballyActivated() && $form->getItemByPostVar('skill_service') instanceof ilFormPropertyGUI) {
514 $this->testOBJ->setSkillServiceEnabled($form->getItemByPostVar('skill_service')->getChecked());
515 }
516 }
517
518 require_once 'Services/Object/classes/class.ilObjectServiceSettingsGUI.php';
519 ilObjectServiceSettingsGUI::updateServiceSettingsForm($this->testOBJ->getId(), $form, array(
521 ));
522
523 // store settings to db
524 $this->testOBJ->saveToDb(true);
525
526 // Update ecs export settings
527 include_once 'Modules/Test/classes/class.ilECSTestSettings.php';
528 $ecs = new ilECSTestSettings($this->testOBJ);
529 $ecs->handleSettingsUpdate();
530 }
531
536 {
537 $header = new ilFormSectionHeaderGUI();
538 $header->setTitle($this->lng->txt("tst_general_properties"));
539 $form->addItem($header);
540
541 // title & description (meta data)
542
543 include_once 'Services/MetaData/classes/class.ilMD.php';
544 $md_obj = new ilMD($this->testOBJ->getId(), 0, "tst");
545 $md_section = $md_obj->getGeneral();
546
547 $title = new ilTextInputGUI($this->lng->txt("title"), "title");
548 $title->setRequired(true);
549 $title->setValue($md_section->getTitle());
550 $form->addItem($title);
551
552 $ids = $md_section->getDescriptionIds();
553 if ($ids) {
554 $desc_obj = $md_section->getDescription(array_pop($ids));
555
556 $desc = new ilTextAreaInputGUI($this->lng->txt("description"), "description");
557 $desc->setCols(50);
558 $desc->setRows(4);
559 $desc->setValue($desc_obj->getDescription());
560 $form->addItem($desc);
561 }
562
563 // pool usage
564 $pool_usage = new ilRadioGroupInputGUI($this->lng->txt('test_question_pool_usage'), 'use_pool');
565
566 $optional_qpl = new ilRadioOption($this->lng->txt('test_question_pool_usage_optional'), 1);
567 $optional_qpl->setInfo($this->lng->txt('test_question_pool_usage_optional_info'));
568 $pool_usage->addOption($optional_qpl);
569
570 $tst_directly = new ilRadioOption($this->lng->txt('test_question_pool_usage_tst_directly'), 0);
571 $tst_directly->setInfo($this->lng->txt('test_question_pool_usage_tst_directly_info'));
572 $pool_usage->addOption($tst_directly);
573
574 $pool_usage->setValue($this->testOBJ->getPoolUsage() ? 1 : 0);
575 $form->addItem($pool_usage);
576
577 // test mode (question set type)
578 $questSetType = new ilRadioGroupInputGUI($this->lng->txt("tst_question_set_type"), 'question_set_type');
579 $questSetTypeFixed = new ilRadioOption(
580 $this->lng->txt("tst_question_set_type_fixed"),
582 $this->lng->txt("tst_question_set_type_fixed_desc")
583 );
584 $questSetType->addOption($questSetTypeFixed);
585 $questSetTypeRandom = new ilRadioOption(
586 $this->lng->txt("tst_question_set_type_random"),
588 $this->lng->txt("tst_question_set_type_random_desc")
589 );
590 $questSetType->addOption($questSetTypeRandom);
591 $questSetTypeContinues = new ilRadioOption(
592 $this->lng->txt("tst_question_set_type_dynamic"),
594 $this->lng->txt("tst_question_set_type_dynamic_desc")
595 );
596 $questSetType->addOption($questSetTypeContinues);
597 $questSetType->setValue($this->testOBJ->getQuestionSetType());
598 if ($this->testOBJ->participantDataExist()) {
599 $questSetType->setDisabled(true);
600 }
601 $form->addItem($questSetType);
602
603 // anonymity
604 $anonymity = new ilRadioGroupInputGUI($this->lng->txt('tst_anonymity'), 'anonymity');
605 if ($this->testOBJ->participantDataExist()) {
606 $anonymity->setDisabled(true);
607 }
608 $rb = new ilRadioOption($this->lng->txt('tst_anonymity_no_anonymization'), 0);
609 $anonymity->addOption($rb);
610 $rb = new ilRadioOption($this->lng->txt('tst_anonymity_anonymous_test'), 1);
611 $anonymity->addOption($rb);
612 $anonymity->setValue((int) $this->testOBJ->getAnonymity());
613 $form->addItem($anonymity);
614 }
615
620 {
621 include_once 'Services/MetaData/classes/class.ilMD.php';
622 $md_obj = new ilMD($this->testOBJ->getId(), 0, "tst");
623 $md_section = $md_obj->getGeneral();
624
625 // title
626 $md_section->setTitle(ilUtil::stripSlashes($form->getItemByPostVar('title')->getValue()));
627 $md_section->update();
628
629 // Description
630 $md_desc_ids = $md_section->getDescriptionIds();
631 if ($md_desc_ids) {
632 $md_desc = $md_section->getDescription(array_pop($md_desc_ids));
633 $md_desc->setDescription(ilUtil::stripSlashes($form->getItemByPostVar('description')->getValue()));
634 $md_desc->update();
635 } else {
636 $md_desc = $md_section->addDescription();
637 $md_desc->setDescription(ilUtil::stripSlashes($form->getItemByPostVar('description')->getValue()));
638 $md_desc->save();
639 }
640
641 $this->testOBJ->setTitle(ilUtil::stripSlashes($form->getItemByPostVar('title')->getValue()));
642 $this->testOBJ->setDescription(ilUtil::stripSlashes($form->getItemByPostVar('description')->getValue()));
643 $this->testOBJ->setOfflineStatus(!$form->getItemByPostVar('online')->getChecked());
644 $this->testOBJ->update();
645
646 // pool usage setting
647 if ($form->getItemByPostVar('use_pool') instanceof ilFormPropertyGUI) {
648 $this->testOBJ->setPoolUsage((int) $form->getItemByPostVar('use_pool')->getValue());
649 }
650
651 if (!$this->testOBJ->participantDataExist()) {
652 // question set type
653 if ($form->getItemByPostVar('question_set_type') instanceof ilFormPropertyGUI) {
654 $this->testOBJ->setQuestionSetType($form->getItemByPostVar('question_set_type')->getValue());
655 }
656 }
657
658 // anonymity setting
659 if (!$this->testOBJ->participantDataExist() && $this->formPropertyExists($form, 'anonymity')) {
660 $this->testOBJ->setAnonymity($form->getItemByPostVar('anonymity')->getValue());
661 }
662 }
663
668 {
669 include_once "Services/Object/classes/class.ilObjectActivation.php";
670 $this->lng->loadLanguageModule('rep');
671
673 $section->setTitle($this->lng->txt('rep_activation_availability'));
674 $form->addItem($section);
675
676 // additional info only with multiple references
677 $act_obj_info = $act_ref_info = "";
678 if (sizeof(ilObject::_getAllReferences($this->testOBJ->getId())) > 1) {
679 $act_obj_info = ' ' . $this->lng->txt('rep_activation_online_object_info');
680 $act_ref_info = $this->lng->txt('rep_activation_access_ref_info');
681 }
682
683 $online = new ilCheckboxInputGUI($this->lng->txt('rep_activation_online'), 'online');
684 $online->setChecked(!$this->testOBJ->getOfflineStatus());
685 $online->setInfo($this->lng->txt('tst_activation_online_info') . $act_obj_info);
686 $form->addItem($online);
687
688 $act_type = new ilCheckboxInputGUI($this->lng->txt('rep_visibility_until'), 'activation_type');
689 $act_type->setChecked($this->testOBJ->isActivationLimited());
690 // $act_type->setInfo($this->lng->txt('tst_availability_until_info'));
691
692 include_once "Services/Form/classes/class.ilDateDurationInputGUI.php";
693 $dur = new ilDateDurationInputGUI($this->lng->txt("rep_time_period"), "access_period");
694 $dur->setRequired(true);
695 $dur->setShowTime(true);
696 $date = $this->testOBJ->getActivationStartingTime();
697 $dur->setStart(new ilDateTime($date ? $date : time(), IL_CAL_UNIX));
698 $dur->setStartText($this->lng->txt('rep_activation_limited_start'));
699 $date = $this->testOBJ->getActivationEndingTime();
700 $dur->setEnd(new ilDateTime($date ? $date : time(), IL_CAL_UNIX));
701 $dur->setEndText($this->lng->txt('rep_activation_limited_end'));
702 $act_type->addSubItem($dur);
703
704 $visible = new ilCheckboxInputGUI($this->lng->txt('rep_activation_limited_visibility'), 'activation_visibility');
705 $visible->setInfo($this->lng->txt('tst_activation_limited_visibility_info'));
706 $visible->setChecked($this->testOBJ->getActivationVisibility());
707 $act_type->addSubItem($visible);
708
709 $form->addItem($act_type);
710 }
711
716 {
717 // activation
718 if ($form->getItemByPostVar('activation_type')->getChecked()) {
719 $this->testOBJ->setActivationLimited(true);
720 $this->testOBJ->setActivationVisibility($form->getItemByPostVar('activation_visibility')->getChecked());
721
722 $period = $form->getItemByPostVar("access_period");
723 $this->testOBJ->setActivationStartingTime($period->getStart()->get(IL_CAL_UNIX));
724 $this->testOBJ->setActivationEndingTime($period->getEnd()->get(IL_CAL_UNIX));
725 } else {
726 $this->testOBJ->setActivationLimited(false);
727 }
728 }
729
734 {
735 global $DIC; /* @var ILIAS\DI\Container $DIC */
736
738 $section->setTitle($this->lng->txt('tst_presentation_settings_section'));
739 $form->addItem($section);
740
741 $DIC->object()->commonSettings()->legacyForm($form, $this->testOBJ)->addTileImage();
742 }
743
748 {
749 global $DIC; /* @var ILIAS\DI\Container $DIC */
750
751 $DIC->object()->commonSettings()->legacyForm($form, $this->testOBJ)->saveTileImage();
752 }
753
758 {
760 $section->setTitle($this->lng->txt('tst_settings_header_intro'));
761 $form->addItem($section);
762
763 // introduction
764 $introEnabled = new ilCheckboxInputGUI($this->lng->txt("tst_introduction"), 'intro_enabled');
765 $introEnabled->setChecked($this->testOBJ->isIntroductionEnabled());
766 $introEnabled->setInfo($this->lng->txt('tst_introduction_desc'));
767 $form->addItem($introEnabled);
768 $intro = new ilTextAreaInputGUI($this->lng->txt("tst_introduction_text"), "introduction");
769 $intro->setRequired(true);
770 $intro->setValue($this->testOBJ->prepareTextareaOutput($this->testOBJ->getIntroduction(), false, true));
771 $intro->setRows(10);
772 $intro->setCols(80);
773 $intro->setUseRte(true);
774 $intro->addPlugin("latex");
775 $intro->addButton("latex");
776 $intro->setRTESupport($this->testOBJ->getId(), "tst", "assessment");
777 $intro->setRteTagSet('full');
778 $introEnabled->addSubItem($intro);
779
780 // showinfo
781 $showinfo = new ilCheckboxInputGUI($this->lng->txt("showinfo"), "showinfo");
782 $showinfo->setValue(1);
783 $showinfo->setChecked($this->testOBJ->getShowInfo());
784 $showinfo->setInfo($this->lng->txt("showinfo_desc"));
785 $form->addItem($showinfo);
786 }
787
792 {
793 if ($form->getItemByPostVar('intro_enabled') instanceof ilFormPropertyGUI) {
794 $this->testOBJ->setIntroductionEnabled($form->getItemByPostVar('intro_enabled')->getChecked());
795
796 if ($form->getItemByPostVar('intro_enabled')->getChecked()) {
797 $this->testOBJ->setIntroduction($form->getItemByPostVar('introduction')->getValue());
798 } else {
799 $this->testOBJ->setIntroduction('');
800 }
801 }
802
803 if ($form->getItemByPostVar('showinfo') instanceof ilFormPropertyGUI) {
804 $this->testOBJ->setShowInfo($form->getItemByPostVar('showinfo')->getChecked());
805 }
806 }
807
812 {
813 $header = new ilFormSectionHeaderGUI();
814 $header->setTitle($this->lng->txt("tst_settings_header_execution"));
815 $form->addItem($header);
816
817 // starting time
818 $startingtime = new ilDateTimeInputGUI($this->lng->txt("tst_starting_time"), 'starting_time');
819 $startingtime->setInfo($this->lng->txt("tst_starting_time_desc"));
820 $startingtime->setShowTime(true);
821 if ($this->testOBJ->getStartingTime() != 0) {
822 $startingtime->setDate(new ilDateTime($this->testOBJ->getStartingTime(), IL_CAL_UNIX));
823 } else {
824 $startingtime->setDate(null);
825 }
826
827 $form->addItem($startingtime);
828 if ($this->testOBJ->participantDataExist()) {
829 $startingtime->setDisabled(true);
830 }
831
832 // ending time
833 $endingtime = new ilDateTimeInputGUI($this->lng->txt("tst_ending_time"), 'ending_time');
834 $endingtime->setInfo($this->lng->txt("tst_ending_time_desc"));
835 $endingtime->setShowTime(true);
836 if ($this->testOBJ->getEndingTime() != 0) {
837 $endingtime->setDate(new ilDateTime($this->testOBJ->getEndingTime(), IL_CAL_UNIX));
838 } else {
839 $endingtime->setDate(null);
840 }
841 $form->addItem($endingtime);
842
843 // test password
844 $pwEnabled = new ilCheckboxInputGUI($this->lng->txt('tst_password'), 'password_enabled');
845 $pwEnabled->setChecked($this->testOBJ->isPasswordEnabled());
846 $pwEnabled->setInfo($this->lng->txt("tst_password_details"));
847 $password = new ilTextInputGUI($this->lng->txt("tst_password_enter"), "password");
848 $password->setRequired(true);
849 $password->setSize(20);
850 $password->setMaxLength(20);
851 $password->setValue($this->testOBJ->getPassword());
852 $pwEnabled->addSubItem($password);
853 $form->addItem($pwEnabled);
854
855 // fixed participants
856 $fixedparticipants = new ilCheckboxInputGUI($this->lng->txt('participants_invitation'), "fixedparticipants");
857 $fixedparticipants->setValue(1);
858 $fixedparticipants->setChecked($this->testOBJ->getFixedParticipants());
859 $fixedparticipants->setInfo($this->lng->txt("participants_invitation_description"));
860 if ($this->testOBJ->participantDataExist()) {
861 $fixedparticipants->setDisabled(true);
862 }
863 $form->addItem($fixedparticipants);
864
865 // simultaneous users
866 $simulLimited = new ilCheckboxInputGUI($this->lng->txt("tst_allowed_users"), 'limitUsers');
867 $simulLimited->setInfo($this->lng->txt("tst_allowed_users_desc"));
868 $simulLimited->setChecked($this->testOBJ->isLimitUsersEnabled());
869
870 // allowed simultaneous users
871 $simul = new ilNumberInputGUI($this->lng->txt("tst_allowed_users_max"), "allowedUsers");
872 $simul->setRequired(true);
873 $simul->allowDecimals(false);
874 $simul->setMinValue(1);
875 $simul->setMinvalueShouldBeGreater(false);
876 $simul->setSize(4);
877 $simul->setValue(($this->testOBJ->getAllowedUsers()) ? $this->testOBJ->getAllowedUsers() : '');
878 $simulLimited->addSubItem($simul);
879
880 // idle time
881 $idle = new ilNumberInputGUI($this->lng->txt("tst_allowed_users_time_gap"), "allowedUsersTimeGap");
882 $idle->setInfo($this->lng->txt("tst_allowed_users_time_gap_desc"));
883 $idle->setSize(4);
884 $idle->setSuffix($this->lng->txt("seconds"));
885 $idle->setValue(($this->testOBJ->getAllowedUsersTimeGap()) ? $this->testOBJ->getAllowedUsersTimeGap() : 300);
886 $simulLimited->addSubItem($idle);
887
888 $form->addItem($simulLimited);
889 return $header;
890 }
891
896 {
897 if (!$this->testOBJ->participantDataExist()) {
898 // starting time
899 $starting_time = $form->getItemByPostVar('starting_time')->getDate();
900 if ($starting_time instanceof ilDateTime) {
901 $this->testOBJ->setStartingTime($starting_time->getUnixtime());
902 $this->testOBJ->setStartingTimeEnabled(true);
903 } else {
904 $this->testOBJ->setStartingTime(null);
905 $this->testOBJ->setStartingTimeEnabled(false);
906 }
907 }
908
909 // ending time
910 $ending_time = $form->getItemByPostVar('ending_time')->getDate();
911 if ($ending_time instanceof ilDateTime) {
912 $this->testOBJ->setEndingTime($ending_time->getUnixtime());
913 $this->testOBJ->setEndingTimeEnabled(true);
914 } else {
915 $this->testOBJ->setEndingTime(null);
916 $this->testOBJ->setEndingTimeEnabled(false);
917 }
918
919 if ($this->formPropertyExists($form, 'password_enabled')) {
920 $this->testOBJ->setPasswordEnabled($form->getItemByPostVar('password_enabled')->getChecked());
921
922 if ($form->getItemByPostVar('password_enabled')->getChecked()) {
923 $this->testOBJ->setPassword($form->getItemByPostVar('password')->getValue());
924 } else {
925 $this->testOBJ->setPassword(''); // otherwise test will still respect value
926 }
927 }
928
929 if ($this->formPropertyExists($form, 'fixedparticipants') && !$this->testOBJ->participantDataExist()) {
930 $this->testOBJ->setFixedParticipants($form->getItemByPostVar('fixedparticipants')->getChecked());
931 }
932
933 if ($this->formPropertyExists($form, 'limitUsers')) {
934 $this->testOBJ->setLimitUsersEnabled($form->getItemByPostVar('limitUsers')->getChecked());
935
936 if ($form->getItemByPostVar('limitUsers')->getChecked()) {
937 $this->testOBJ->setAllowedUsers($form->getItemByPostVar('allowedUsers')->getValue());
938 $this->testOBJ->setAllowedUsersTimeGap($form->getItemByPostVar('allowedUsersTimeGap')->getValue());
939 } else {
940 $this->testOBJ->setAllowedUsers(''); // otherwise test will still respect value
941 }
942 }
943 }
944
949 {
950 // section header test run
951 $header = new ilFormSectionHeaderGUI();
952 $header->setTitle($this->lng->txt("tst_settings_header_test_run"));
953 $form->addItem($header);
954
955 // max. number of passes
956 $limitPasses = new ilCheckboxInputGUI($this->lng->txt("tst_limit_nr_of_tries"), 'limitPasses');
957 $limitPasses->setInfo($this->lng->txt("tst_nr_of_tries_desc"));
958 $limitPasses->setChecked($this->testOBJ->getNrOfTries() > 0);
959 $nr_of_tries = new ilNumberInputGUI($this->lng->txt("tst_nr_of_tries"), "nr_of_tries");
960 $nr_of_tries->setSize(3);
961 $nr_of_tries->allowDecimals(false);
962 $nr_of_tries->setMinValue(1);
963 $nr_of_tries->setMinvalueShouldBeGreater(false);
964 $nr_of_tries->setValue($this->testOBJ->getNrOfTries() ? $this->testOBJ->getNrOfTries() : 1);
965 $nr_of_tries->setRequired(true);
966 $limitPasses->addSubItem($nr_of_tries);
967 $blockAfterPassed = new ilCheckboxInputGUI(
968 $this->lng->txt('tst_block_passes_after_passed'),
969 'block_after_passed'
970 );
971 $blockAfterPassed->setInfo($this->lng->txt('tst_block_passes_after_passed_info'));
972 $blockAfterPassed->setChecked($this->testOBJ->isBlockPassesAfterPassedEnabled());
973 $limitPasses->addSubItem($blockAfterPassed);
974 if ($this->testOBJ->participantDataExist()) {
975 $limitPasses->setDisabled(true);
976 $blockAfterPassed->setDisabled(true);
977 $nr_of_tries->setDisabled(true);
978 }
979 $form->addItem($limitPasses);
980
981 // pass_waiting time between testruns
982 $pass_waiting_enabled = new ilCheckboxInputGUI($this->lng->txt('tst_pass_waiting_enabled'), 'pass_waiting_enabled');
983 $pass_waiting_enabled->setInfo($this->lng->txt('tst_pass_waiting_info'));
984 $pass_waiting_enabled->setChecked($this->testOBJ->isPassWaitingEnabled());
985
986 // pass_waiting
987 $duration = new ilDurationInputGUI($this->lng->txt("tst_pass_waiting_time"), "pass_waiting");
988
989 $duration->setShowMonths(true);
990 $duration->setShowDays(true);
991 $duration->setShowHours(true);
992 $duration->setShowMinutes(true);
993
994 $pw_time_array = explode(':', $this->testOBJ->getPassWaiting());
995 $duration->setMonths($pw_time_array[0]);
996 $duration->setDays($pw_time_array[1]);
997 $duration->setHours($pw_time_array[2]);
998 $duration->setMinutes($pw_time_array[3]);
999 $duration->setRequired(false);
1000 $pass_waiting_enabled->addSubItem($duration);
1001
1002 $form->addItem($pass_waiting_enabled);
1003
1004 // enable max. processing time
1005 $processing = new ilCheckboxInputGUI($this->lng->txt("tst_processing_time"), "chb_processing_time");
1006 $processing->setInfo($this->lng->txt("tst_processing_time_desc"));
1007 $processing->setValue(1);
1008
1009 if ($this->settingsTemplate && $this->getTemplateSettingValue('chb_processing_time')) {
1010 $processing->setChecked(true);
1011 } else {
1012 $processing->setChecked($this->testOBJ->getEnableProcessingTime());
1013 }
1014
1015 // max. processing time
1016 $processingtime = new ilNumberInputGUI($this->lng->txt("tst_processing_time_duration"), 'processing_time');
1017 $processingtime->allowDecimals(false);
1018 $processingtime->setMinValue(1);
1019 $processingtime->setMinvalueShouldBeGreater(false);
1020 $processingtime->setValue($this->testOBJ->getProcessingTimeAsMinutes());
1021 $processingtime->setSize(5);
1022 $processingtime->setSuffix($this->lng->txt('minutes'));
1023 $processingtime->setInfo($this->lng->txt("tst_processing_time_duration_desc"));
1024 $processing->addSubItem($processingtime);
1025
1026 // reset max. processing time
1027 $resetprocessing = new ilCheckboxInputGUI('', "chb_reset_processing_time");
1028 $resetprocessing->setValue(1);
1029 $resetprocessing->setOptionTitle($this->lng->txt("tst_reset_processing_time"));
1030 $resetprocessing->setChecked($this->testOBJ->getResetProcessingTime());
1031 $resetprocessing->setInfo($this->lng->txt("tst_reset_processing_time_desc"));
1032 $processing->addSubItem($resetprocessing);
1033 $form->addItem($processing);
1034
1035 if ($this->testOBJ->participantDataExist()) {
1036 $processing->setDisabled(true);
1037 $processingtime->setDisabled(true);
1038 $resetprocessing->setDisabled(true);
1039
1040 $duration->setDisabled(true);
1041 $pass_waiting_enabled->setDisabled(true);
1042 }
1043
1044 // kiosk mode
1045 $kiosk = new ilCheckboxInputGUI($this->lng->txt("kiosk"), "kiosk");
1046 $kiosk->setValue(1);
1047 $kiosk->setChecked($this->testOBJ->getKioskMode());
1048 $kiosk->setInfo($this->lng->txt("kiosk_description"));
1049
1050 // kiosk mode options
1051 $kiosktitle = new ilCheckboxGroupInputGUI($this->lng->txt("kiosk_options"), "kiosk_options");
1052 $kiosktitle->addOption(new ilCheckboxOption($this->lng->txt("kiosk_show_title"), 'kiosk_title', ''));
1053 $kiosktitle->addOption(new ilCheckboxOption($this->lng->txt("kiosk_show_participant"), 'kiosk_participant', ''));
1054 $values = array();
1055 if ($this->testOBJ->getShowKioskModeTitle()) {
1056 array_push($values, 'kiosk_title');
1057 }
1058 if ($this->testOBJ->getShowKioskModeParticipant()) {
1059 array_push($values, 'kiosk_participant');
1060 }
1061 $kiosktitle->setValue($values);
1062 $kiosktitle->setInfo($this->lng->txt("kiosk_options_desc"));
1063 $kiosk->addSubItem($kiosktitle);
1064
1065 $form->addItem($kiosk);
1066
1067 $examIdInPass = new ilCheckboxInputGUI($this->lng->txt('examid_in_test_pass'), 'examid_in_test_pass');
1068 $examIdInPass->setInfo($this->lng->txt('examid_in_test_pass_desc'));
1069 $examIdInPass->setChecked($this->testOBJ->isShowExamIdInTestPassEnabled());
1070 $form->addItem($examIdInPass);
1071 }
1072
1077 {
1078 if (!$this->testOBJ->participantDataExist()) {
1079 // nr of tries (max passes)
1080 if ($form->getItemByPostVar('limitPasses') instanceof ilFormPropertyGUI) {
1081 if ($form->getItemByPostVar('limitPasses')->getChecked()) {
1082 $this->testOBJ->setNrOfTries($form->getItemByPostVar('nr_of_tries')->getValue());
1083
1084 $this->testOBJ->setBlockPassesAfterPassedEnabled(
1085 (bool) $form->getItemByPostVar('block_after_passed')->getChecked()
1086 );
1087 } else {
1088 $this->testOBJ->setNrOfTries(0);
1089 $this->testOBJ->setBlockPassesAfterPassedEnabled(false);
1090 }
1091 }
1092
1093 // pass_waiting
1094 if ($form->getItemByPostVar('pass_waiting_enabled') instanceof ilFormPropertyGUI) {
1095 if ($form->getItemByPostVar('pass_waiting_enabled')->getChecked()) {
1096 $pass_waiting_values = $form->getItemByPostVar('pass_waiting');
1097
1098 $pass_waiting_duration[] = sprintf("%'.02d", $pass_waiting_values->getMonths());
1099 $pass_waiting_duration[] = sprintf("%'.03d", $pass_waiting_values->getDays());
1100 $pass_waiting_duration[] = sprintf("%'.02d", $pass_waiting_values->getHours());
1101 $pass_waiting_duration[] = sprintf("%'.02d", $pass_waiting_values->getMinutes());
1102 $pass_waiting_duration[] = sprintf("%'.02d", $pass_waiting_values->getSeconds());
1103
1104 $pass_waiting_string = implode(':', $pass_waiting_duration);
1105 $this->testOBJ->setPassWaiting($pass_waiting_string);
1106 } else {
1107 $this->testOBJ->setPassWaiting("00:000:00:00:00");
1108 }
1109 }
1110
1111 $this->testOBJ->setEnableProcessingTime($form->getItemByPostVar('chb_processing_time')->getChecked());
1112 if ($this->testOBJ->getEnableProcessingTime()) {
1113 $this->testOBJ->setProcessingTimeByMinutes($form->getItemByPostVar('processing_time')->getValue());
1114 $this->testOBJ->setResetProcessingTime($form->getItemByPostVar('chb_reset_processing_time')->getChecked());
1115 } else {
1116 $this->testOBJ->setProcessingTime('');
1117 $this->testOBJ->setResetProcessingTime(false);
1118 }
1119 }
1120
1121 if ($form->getItemByPostVar('kiosk') instanceof ilFormPropertyGUI) {
1122 $this->testOBJ->setKioskMode($form->getInput('kiosk'));
1123 $kioskOptions = $form->getItemByPostVar('kiosk_options')->getValue();
1124 if (is_array($kioskOptions)) {
1125 $this->testOBJ->setShowKioskModeTitle(in_array('kiosk_title', $kioskOptions));
1126 $this->testOBJ->setShowKioskModeParticipant(in_array('kiosk_participant', $kioskOptions));
1127 } else {
1128 $this->testOBJ->setShowKioskModeTitle(false);
1129 $this->testOBJ->setShowKioskModeParticipant(false);
1130 }
1131 }
1132
1133 if ($form->getItemByPostVar('examid_in_test_pass') instanceof ilFormPropertyGUI) {
1134 $value = $form->getItemByPostVar('examid_in_test_pass')->getChecked();
1135 $this->testOBJ->setShowExamIdInTestPassEnabled($value);
1136 }
1137 }
1138
1143 {
1144 $fields = array(
1145 'title_output', 'autosave', 'chb_shuffle_questions', 'chb_shuffle_questions',
1146 'offer_hints', 'instant_feedback_contents', 'instant_feedback_trigger',
1147 'answer_fixation_handling', 'obligations_enabled'
1148 );
1149
1150 if ($this->isSectionHeaderRequired($fields) || $this->isCharSelectorPropertyRequired()) {
1151 // sequence properties
1152 $seqheader = new ilFormSectionHeaderGUI();
1153 $seqheader->setTitle($this->lng->txt("tst_presentation_properties"));
1154 $form->addItem($seqheader);
1155 }
1156
1157 // question title output
1158 $title_output = new ilRadioGroupInputGUI($this->lng->txt("tst_title_output"), "title_output");
1159 $title_output->addOption(new ilRadioOption($this->lng->txt("tst_title_output_full"), 0, ''));
1160 $title_output->addOption(new ilRadioOption($this->lng->txt("tst_title_output_hide_points"), 1, ''));
1161 $title_output->addOption(new ilRadioOption($this->lng->txt("tst_title_output_no_title"), 2, ''));
1162 $title_output->setValue($this->testOBJ->getTitleOutput());
1163 $form->addItem($title_output);
1164
1165 // Autosave
1166 $autosave_output = new ilCheckboxInputGUI($this->lng->txt('autosave'), 'autosave');
1167 $autosave_output->setValue(1);
1168 $autosave_output->setChecked($this->testOBJ->getAutosave());
1169 $autosave_output->setInfo($this->lng->txt('autosave_info'));
1170 $autosave_interval = new ilTextInputGUI($this->lng->txt('autosave_ival'), 'autosave_ival');
1171 $autosave_interval->setSize(10);
1172 $autosave_interval->setValue($this->testOBJ->getAutosaveIval() / 1000);
1173 $autosave_interval->setSuffix($this->lng->txt('seconds'));
1174 $autosave_output->addSubItem($autosave_interval);
1175 $form->addItem($autosave_output);
1176
1177 // shuffle questions
1178 $shuffle = new ilCheckboxInputGUI($this->lng->txt("tst_shuffle_questions"), "chb_shuffle_questions");
1179 $shuffle->setValue(1);
1180 $shuffle->setChecked($this->testOBJ->getShuffleQuestions());
1181 $shuffle->setInfo($this->lng->txt("tst_shuffle_questions_description"));
1182 $form->addItem($shuffle);
1183
1184 // offer hints
1185 $checkBoxOfferHints = new ilCheckboxInputGUI($this->lng->txt('tst_setting_offer_hints_label'), 'offer_hints');
1186 $checkBoxOfferHints->setChecked($this->testOBJ->isOfferingQuestionHintsEnabled());
1187 $checkBoxOfferHints->setInfo($this->lng->txt('tst_setting_offer_hints_info'));
1188 $form->addItem($checkBoxOfferHints);
1189
1190 // instant feedback
1191 $instant_feedback_enabled = new ilCheckboxInputGUI($this->lng->txt('tst_instant_feedback'), 'instant_feedback_enabled');
1192 $instant_feedback_enabled->setInfo($this->lng->txt('tst_instant_feedback_desc'));
1193 $instant_feedback_enabled->setChecked($this->testOBJ->isAnyInstantFeedbackOptionEnabled());
1194 $form->addItem($instant_feedback_enabled);
1195 $instant_feedback_contents = new ilCheckboxGroupInputGUI($this->lng->txt('tst_instant_feedback_contents'), 'instant_feedback_contents');
1196 $instant_feedback_contents->setRequired(true);
1197 $instant_feedback_contents->addOption(new ilCheckboxOption(
1198 $this->lng->txt('tst_instant_feedback_results'),
1199 'instant_feedback_points',
1200 $this->lng->txt('tst_instant_feedback_results_desc')
1201 ));
1202 $instant_feedback_contents->addOption(new ilCheckboxOption(
1203 $this->lng->txt('tst_instant_feedback_answer_generic'),
1204 'instant_feedback_generic',
1205 $this->lng->txt('tst_instant_feedback_answer_generic_desc')
1206 ));
1207 $instant_feedback_contents->addOption(new ilCheckboxOption(
1208 $this->lng->txt('tst_instant_feedback_answer_specific'),
1209 'instant_feedback_specific',
1210 $this->lng->txt('tst_instant_feedback_answer_specific_desc')
1211 ));
1212 $instant_feedback_contents->addOption(new ilCheckboxOption(
1213 $this->lng->txt('tst_instant_feedback_solution'),
1214 'instant_feedback_solution',
1215 $this->lng->txt('tst_instant_feedback_solution_desc')
1216 ));
1217 $instant_feedback_contents->setValue($this->testOBJ->getInstantFeedbackOptionsAsArray());
1218 $instant_feedback_enabled->addSubItem($instant_feedback_contents);
1219 $instant_feedback_trigger = new ilRadioGroupInputGUI(
1220 $this->lng->txt('tst_instant_feedback_trigger'),
1221 'instant_feedback_trigger'
1222 );
1223 $ifbTriggerOpt = new ilRadioOption(
1224 $this->lng->txt('tst_instant_feedback_trigger_manual'),
1225 self::INSTANT_FEEDBACK_TRIGGER_MANUAL
1226 );
1227 $ifbTriggerOpt->setInfo($this->lng->txt('tst_instant_feedback_trigger_manual_desc'));
1228 $instant_feedback_trigger->addOption($ifbTriggerOpt);
1229 $ifbTriggerOpt = new ilRadioOption(
1230 $this->lng->txt('tst_instant_feedback_trigger_forced'),
1231 self::INSTANT_FEEDBACK_TRIGGER_FORCED
1232 );
1233 $ifbTriggerOpt->setInfo($this->lng->txt('tst_instant_feedback_trigger_forced_desc'));
1234 $instant_feedback_trigger->addOption($ifbTriggerOpt);
1235 $instant_feedback_trigger->setValue($this->testOBJ->isForceInstantFeedbackEnabled());
1236 $instant_feedback_enabled->addSubItem($instant_feedback_trigger);
1237
1238 $answerFixation = new ilRadioGroupInputGUI(
1239 $this->lng->txt('tst_answer_fixation_handling'),
1240 'answer_fixation_handling'
1241 );
1242 $radioOption = new ilRadioOption(
1243 $this->lng->txt('tst_answer_fixation_none'),
1244 self::ANSWER_FIXATION_NONE
1245 );
1246 $radioOption->setInfo($this->lng->txt('tst_answer_fixation_none_desc'));
1247 $answerFixation->addOption($radioOption);
1248 $radioOption = new ilRadioOption(
1249 $this->lng->txt('tst_answer_fixation_on_instant_feedback'),
1250 self::ANSWER_FIXATION_ON_INSTANT_FEEDBACK
1251 );
1252 $radioOption->setInfo($this->lng->txt('tst_answer_fixation_on_instant_feedback_desc'));
1253 $answerFixation->addOption($radioOption);
1254 $radioOption = new ilRadioOption(
1255 $this->lng->txt('tst_answer_fixation_on_followup_question'),
1256 self::ANSWER_FIXATION_ON_FOLLOWUP_QUESTION
1257 );
1258 $radioOption->setInfo($this->lng->txt('tst_answer_fixation_on_followup_question_desc'));
1259 $answerFixation->addOption($radioOption);
1260 $radioOption = new ilRadioOption(
1261 $this->lng->txt('tst_answer_fixation_on_instantfb_or_followupqst'),
1262 self::ANSWER_FIXATION_ON_IFB_OR_FUQST
1263 );
1264 $radioOption->setInfo($this->lng->txt('tst_answer_fixation_on_instantfb_or_followupqst_desc'));
1265 $answerFixation->addOption($radioOption);
1266 $answerFixation->setValue($this->getAnswerFixationSettingsAsFormValue());
1267 $form->addItem($answerFixation);
1268
1269 // enable obligations
1270 $checkBoxEnableObligations = new ilCheckboxInputGUI($this->lng->txt('tst_setting_enable_obligations_label'), 'obligations_enabled');
1271 $checkBoxEnableObligations->setChecked($this->testOBJ->areObligationsEnabled());
1272 $checkBoxEnableObligations->setInfo($this->lng->txt('tst_setting_enable_obligations_info'));
1273 $form->addItem($checkBoxEnableObligations);
1274
1275 // selector for unicode characters
1276 if ($this->isCharSelectorPropertyRequired()) {
1277 require_once 'Services/UIComponent/CharSelector/classes/class.ilCharSelectorGUI.php';
1279 $char_selector->getConfig()->setAvailability($this->testOBJ->getCharSelectorAvailability());
1280 $char_selector->getConfig()->setDefinition($this->testOBJ->getCharSelectorDefinition());
1281 $char_selector->addFormProperties($form);
1282 $char_selector->setFormValues($form);
1283 }
1284
1285 if ($this->testOBJ->participantDataExist()) {
1286 $checkBoxOfferHints->setDisabled(true);
1287 $instant_feedback_enabled->setDisabled(true);
1288 $instant_feedback_trigger->setDisabled(true);
1289 $instant_feedback_contents->setDisabled(true);
1290 $answerFixation->setDisabled(true);
1291 $checkBoxEnableObligations->setDisabled(true);
1292 }
1293 }
1294
1299 {
1300 if ($form->getItemByPostVar('title_output') instanceof ilFormPropertyGUI) {
1301 $this->testOBJ->setTitleOutput($form->getItemByPostVar('title_output')->getValue());
1302 }
1303
1304 if ($form->getItemByPostVar('autosave') instanceof ilFormPropertyGUI) {
1305 $this->testOBJ->setAutosave($form->getItemByPostVar('autosave')->getChecked());
1306 $this->testOBJ->setAutosaveIval($form->getItemByPostVar('autosave_ival')->getValue() * 1000);
1307 }
1308
1309 if ($form->getItemByPostVar('chb_shuffle_questions') instanceof ilFormPropertyGUI) {
1310 $this->testOBJ->setShuffleQuestions($form->getItemByPostVar('chb_shuffle_questions')->getChecked());
1311 }
1312
1313 if (!$this->testOBJ->participantDataExist() && $this->formPropertyExists($form, 'offer_hints')) {
1314 $this->testOBJ->setOfferingQuestionHintsEnabled($form->getItemByPostVar('offer_hints')->getChecked());
1315 }
1316
1317 if (!$this->testOBJ->participantDataExist() && $this->formPropertyExists($form, 'instant_feedback_enabled')) {
1318 if ($form->getItemByPostVar('instant_feedback_enabled')->getChecked()) {
1319 if ($this->formPropertyExists($form, 'instant_feedback_contents')) {
1320 $this->testOBJ->setInstantFeedbackOptionsByArray(
1321 $form->getItemByPostVar('instant_feedback_contents')->getValue()
1322 );
1323 }
1324 if ($this->formPropertyExists($form, 'instant_feedback_trigger')) {
1325 $this->testOBJ->setForceInstantFeedbackEnabled(
1326 (bool) $form->getItemByPostVar('instant_feedback_trigger')->getValue()
1327 );
1328 }
1329 } else {
1330 $this->testOBJ->setInstantFeedbackOptionsByArray(array());
1331 $this->testOBJ->setForceInstantFeedbackEnabled(false);
1332 }
1333 }
1334
1335 if (!$this->testOBJ->participantDataExist() && $this->formPropertyExists($form, 'answer_fixation_handling')) {
1336 $this->setAnswerFixationSettingsByFormValue($form->getItemByPostVar('answer_fixation_handling')->getValue());
1337 }
1338
1339 if (!$this->testOBJ->participantDataExist() && $this->formPropertyExists($form, 'obligations_enabled')) {
1340 $this->testOBJ->setObligationsEnabled($form->getItemByPostVar('obligations_enabled')->getChecked());
1341 }
1342
1343 if ($this->isCharSelectorPropertyRequired()) {
1344 require_once 'Services/UIComponent/CharSelector/classes/class.ilCharSelectorGUI.php';
1346 $char_selector->addFormProperties($form);
1347 $char_selector->getFormValues($form);
1348 $this->testOBJ->setCharSelectorAvailability($char_selector->getConfig()->getAvailability());
1349 $this->testOBJ->setCharSelectorDefinition($char_selector->getConfig()->getDefinition());
1350 }
1351 }
1352
1357 {
1358 // sequence properties
1359 $seqheader = new ilFormSectionHeaderGUI();
1360 $seqheader->setTitle($this->lng->txt("tst_sequence_properties"));
1361 $form->addItem($seqheader);
1362
1363 // use previous answers
1364 $prevanswers = new ilCheckboxInputGUI($this->lng->txt("tst_use_previous_answers"), "chb_use_previous_answers");
1365 $prevanswers->setValue(1);
1366 $prevanswers->setChecked($this->testOBJ->getUsePreviousAnswers());
1367 $prevanswers->setInfo($this->lng->txt("tst_use_previous_answers_description"));
1368 $form->addItem($prevanswers);
1369
1370 // show suspend test
1371 $cancel = new ilCheckboxInputGUI($this->lng->txt("tst_show_cancel"), "chb_show_cancel");
1372 $cancel->setValue(1);
1373 $cancel->setChecked($this->testOBJ->getShowCancel());
1374 $cancel->setInfo($this->lng->txt("tst_show_cancel_description"));
1375 $form->addItem($cancel);
1376
1377 // postpone questions
1378 $postpone = new ilRadioGroupInputGUI($this->lng->txt("tst_postpone"), "postpone");
1379 $postpone->addOption(new ilRadioOption(
1380 $this->lng->txt("tst_postpone_off"),
1381 0,
1382 $this->lng->txt("tst_postpone_off_desc")
1383 ));
1384 $postpone->addOption(new ilRadioOption(
1385 $this->lng->txt("tst_postpone_on"),
1386 1,
1387 $this->lng->txt("tst_postpone_on_desc")
1388 ));
1389 $postpone->setValue((int) $this->testOBJ->getSequenceSettings());
1390 $form->addItem($postpone);
1391
1392 // show list of questions
1393 $list_of_questions = new ilCheckboxInputGUI($this->lng->txt("tst_show_summary"), "list_of_questions");
1394 //$list_of_questions->setOptionTitle($this->lng->txt("tst_show_summary"));
1395 $list_of_questions->setValue(1);
1396 $list_of_questions->setChecked($this->testOBJ->getListOfQuestions());
1397 $list_of_questions->setInfo($this->lng->txt("tst_show_summary_description"));
1398
1399 $list_of_questions_options = new ilCheckboxGroupInputGUI('', "list_of_questions_options");
1400 $list_of_questions_options->addOption(new ilCheckboxOption($this->lng->txt("tst_list_of_questions_start"), 'chb_list_of_questions_start', ''));
1401 $list_of_questions_options->addOption(new ilCheckboxOption($this->lng->txt("tst_list_of_questions_end"), 'chb_list_of_questions_end', ''));
1402 $list_of_questions_options->addOption(new ilCheckboxOption($this->lng->txt("tst_list_of_questions_with_description"), 'chb_list_of_questions_with_description', ''));
1403 $values = array();
1404 if ($this->testOBJ->getListOfQuestionsStart()) {
1405 array_push($values, 'chb_list_of_questions_start');
1406 }
1407 if ($this->testOBJ->getListOfQuestionsEnd()) {
1408 array_push($values, 'chb_list_of_questions_end');
1409 }
1410 if ($this->testOBJ->getListOfQuestionsDescription()) {
1411 array_push($values, 'chb_list_of_questions_with_description');
1412 }
1413 $list_of_questions_options->setValue($values);
1414
1415 $list_of_questions->addSubItem($list_of_questions_options);
1416 $form->addItem($list_of_questions);
1417
1418 // show question marking
1419 $marking = new ilCheckboxInputGUI($this->lng->txt("question_marking"), "chb_show_marker");
1420 $marking->setValue(1);
1421 $marking->setChecked($this->testOBJ->getShowMarker());
1422 $marking->setInfo($this->lng->txt("question_marking_description"));
1423 $form->addItem($marking);
1424 }
1425
1430 {
1431 if ($this->formPropertyExists($form, 'chb_use_previous_answers')) {
1432 $this->testOBJ->setUsePreviousAnswers($form->getInput('chb_use_previous_answers'));
1433 }
1434
1435 if ($this->formPropertyExists($form, 'chb_show_cancel')) {
1436 $this->testOBJ->setShowCancel($form->getItemByPostVar('chb_show_cancel')->getChecked());
1437 }
1438
1439 if ($this->formPropertyExists($form, 'postpone')) {
1440 $this->testOBJ->setPostponingEnabled((bool) $form->getItemByPostVar('postpone')->getValue());
1441 }
1442
1443 $this->testOBJ->setListOfQuestions($form->getItemByPostVar('list_of_questions')->getChecked());
1444 $listOfQuestionsOptions = $form->getItemByPostVar('list_of_questions_options')->getValue();
1445 if (is_array($listOfQuestionsOptions)) {
1446 $this->testOBJ->setListOfQuestionsStart(in_array('chb_list_of_questions_start', $listOfQuestionsOptions));
1447 $this->testOBJ->setListOfQuestionsEnd(in_array('chb_list_of_questions_end', $listOfQuestionsOptions));
1448 $this->testOBJ->setListOfQuestionsDescription(in_array('chb_list_of_questions_with_description', $listOfQuestionsOptions));
1449 } else {
1450 $this->testOBJ->setListOfQuestionsStart(0);
1451 $this->testOBJ->setListOfQuestionsEnd(0);
1452 $this->testOBJ->setListOfQuestionsDescription(0);
1453 }
1454
1455 if ($this->formPropertyExists($form, 'chb_show_marker')) {
1456 $this->testOBJ->setShowMarker($form->getItemByPostVar('chb_show_marker')->getChecked());
1457 }
1458 }
1459
1464 {
1465 $testFinishHeader = new ilFormSectionHeaderGUI();
1466 $testFinishHeader->setTitle($this->lng->txt("tst_final_information"));
1467 $form->addItem($testFinishHeader);
1468
1469 // examview
1470 $enable_examview = new ilCheckboxInputGUI($this->lng->txt("enable_examview"), 'enable_examview');
1471 $enable_examview->setValue(1);
1472 $enable_examview->setChecked($this->testOBJ->getEnableExamview());
1473 $enable_examview->setInfo($this->lng->txt("enable_examview_desc"));
1474 $show_examview_pdf = new ilCheckboxInputGUI('', 'show_examview_pdf');
1475 $show_examview_pdf->setValue(1);
1476 $show_examview_pdf->setChecked($this->testOBJ->getShowExamviewPdf());
1477 $show_examview_pdf->setOptionTitle($this->lng->txt("show_examview_pdf"));
1478 $enable_examview->addSubItem($show_examview_pdf);
1479 $form->addItem($enable_examview);
1480
1481 // show final statement
1482 $showfinal = new ilCheckboxInputGUI($this->lng->txt("final_statement"), "showfinalstatement");
1483 $showfinal->setChecked($this->testOBJ->getShowFinalStatement());
1484 $showfinal->setInfo($this->lng->txt("final_statement_show_desc"));
1485 $form->addItem($showfinal);
1486 // final statement
1487 $finalstatement = new ilTextAreaInputGUI($this->lng->txt("final_statement"), "finalstatement");
1488 $finalstatement->setRequired(true);
1489 $finalstatement->setValue($this->testOBJ->prepareTextareaOutput($this->testOBJ->getFinalStatement(), false, true));
1490 $finalstatement->setRows(10);
1491 $finalstatement->setCols(80);
1492 $finalstatement->setUseRte(true);
1493 $finalstatement->addPlugin("latex");
1494 $finalstatement->addButton("latex");
1495 $finalstatement->setRTESupport($this->testOBJ->getId(), "tst", "assessment");
1496 $finalstatement->setRteTagSet('full');
1497 $showfinal->addSubItem($finalstatement);
1498
1499 $redirection_mode = $this->testOBJ->getRedirectionMode();
1500 $rm_enabled = new ilCheckboxInputGUI($this->lng->txt('redirect_after_finishing_tst'), 'redirection_enabled');
1501 $rm_enabled->setInfo($this->lng->txt('redirect_after_finishing_tst_desc'));
1502 $rm_enabled->setChecked($redirection_mode == '0' ? false : true);
1503 $radio_rm = new ilRadioGroupInputGUI($this->lng->txt('redirect_after_finishing_rule'), 'redirection_mode');
1504 $always = new ilRadioOption($this->lng->txt('redirect_always'), REDIRECT_ALWAYS);
1505 $radio_rm->addOption($always);
1506 $kiosk = new ilRadioOption($this->lng->txt('redirect_in_kiosk_mode'), REDIRECT_KIOSK);
1507 $radio_rm->addOption($kiosk);
1508 $radio_rm->setValue(in_array($redirection_mode, array(REDIRECT_ALWAYS, REDIRECT_KIOSK)) ? $redirection_mode : REDIRECT_ALWAYS);
1509 $rm_enabled->addSubItem($radio_rm);
1510 $redirection_url = new ilTextInputGUI($this->lng->txt('redirection_url'), 'redirection_url');
1511 $redirection_url->setValue((string) $this->testOBJ->getRedirectionUrl());
1512 $redirection_url->setRequired(true);
1513 $rm_enabled->addSubItem($redirection_url);
1514
1515 $form->addItem($rm_enabled);
1516
1517 // Sign submission
1518 $sign_submission = $this->testOBJ->getSignSubmission();
1519 $sign_submission_enabled = new ilCheckboxInputGUI($this->lng->txt('sign_submission'), 'sign_submission');
1520 $sign_submission_enabled->setChecked($sign_submission);
1521 $sign_submission_enabled->setInfo($this->lng->txt('sign_submission_info'));
1522 $form->addItem($sign_submission_enabled);
1523
1524 // mail notification
1525 $mailnotification = new ilCheckboxInputGUI($this->lng->txt("tst_finish_notification"), "mailnotification");
1526 $mailnotification->setInfo($this->lng->txt("tst_finish_notification_desc"));
1527 $mailnotification->setChecked($this->testOBJ->getMailNotification() > 0);
1528 $form->addItem($mailnotification);
1529
1530 $mailnotificationContent = new ilRadioGroupInputGUI($this->lng->txt("tst_finish_notification_content"), "mailnotification_content");
1531 $mailnotificationContent->addOption(new ilRadioOption($this->lng->txt("tst_finish_notification_simple"), 1, ''));
1532 $mailnotificationContent->addOption(new ilRadioOption($this->lng->txt("tst_finish_notification_advanced"), 2, ''));
1533 $mailnotificationContent->setValue($this->testOBJ->getMailNotification() ? $this->testOBJ->getMailNotification() : 1);
1534 $mailnotificationContent->setRequired(true);
1535 $mailnotification->addSubItem($mailnotificationContent);
1536
1537 $mailnottype = new ilCheckboxInputGUI('', "mailnottype");
1538 $mailnottype->setValue(1);
1539 $mailnottype->setOptionTitle($this->lng->txt("mailnottype"));
1540 $mailnottype->setChecked($this->testOBJ->getMailNotificationType());
1541 $mailnotification->addSubItem($mailnottype);
1542 }
1543
1548 {
1549 if ($this->formPropertyExists($form, 'enable_examview')) {
1550 $this->testOBJ->setEnableExamview($form->getItemByPostVar('enable_examview')->getChecked());
1551 $this->testOBJ->setShowExamviewPdf($form->getItemByPostVar('show_examview_pdf')->getChecked());
1552 }
1553
1554 $this->testOBJ->setShowFinalStatement($form->getItemByPostVar('showfinalstatement')->getChecked());
1555 $this->testOBJ->setFinalStatement($form->getItemByPostVar('finalstatement')->getValue());
1556
1557 if ($form->getItemByPostVar('redirection_enabled')->getChecked()) {
1558 $this->testOBJ->setRedirectionMode($form->getItemByPostVar('redirection_mode')->getValue());
1559 } else {
1560 $this->testOBJ->setRedirectionMode(REDIRECT_NONE);
1561 }
1562 if (strlen($form->getItemByPostVar('redirection_url')->getValue())) {
1563 $this->testOBJ->setRedirectionUrl($form->getItemByPostVar('redirection_url')->getValue());
1564 } else {
1565 $this->testOBJ->setRedirectionUrl(null);
1566 }
1567
1568 if ($this->formPropertyExists($form, 'sign_submission')) {
1569 $this->testOBJ->setSignSubmission($form->getItemByPostVar('sign_submission')->getChecked());
1570 }
1571
1572 if ($this->formPropertyExists($form, 'mailnotification') && $form->getItemByPostVar('mailnotification')->getChecked()) {
1573 $this->testOBJ->setMailNotification($form->getItemByPostVar('mailnotification_content')->getValue());
1574 $this->testOBJ->setMailNotificationType($form->getItemByPostVar('mailnottype')->getChecked());
1575 } else {
1576 $this->testOBJ->setMailNotification(0);
1577 $this->testOBJ->setMailNotificationType(false);
1578 }
1579 }
1580
1581 protected function setAnswerFixationSettingsByFormValue($formValue)
1582 {
1583 switch ($formValue) {
1585 $this->testOBJ->setInstantFeedbackAnswerFixationEnabled(false);
1586 $this->testOBJ->setFollowupQuestionAnswerFixationEnabled(false);
1587 break;
1589 $this->testOBJ->setInstantFeedbackAnswerFixationEnabled(true);
1590 $this->testOBJ->setFollowupQuestionAnswerFixationEnabled(false);
1591 break;
1593 $this->testOBJ->setInstantFeedbackAnswerFixationEnabled(false);
1594 $this->testOBJ->setFollowupQuestionAnswerFixationEnabled(true);
1595 break;
1597 $this->testOBJ->setInstantFeedbackAnswerFixationEnabled(true);
1598 $this->testOBJ->setFollowupQuestionAnswerFixationEnabled(true);
1599 break;
1600 }
1601 }
1602
1604 {
1605 if ($this->testOBJ->isInstantFeedbackAnswerFixationEnabled() && $this->testOBJ->isFollowupQuestionAnswerFixationEnabled()) {
1607 }
1608
1609 if ($this->testOBJ->isFollowupQuestionAnswerFixationEnabled()) {
1611 }
1612
1613 if ($this->testOBJ->isInstantFeedbackAnswerFixationEnabled()) {
1615 }
1616
1618 }
1619}
$section
Definition: Utf8Test.php:83
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
This shows a character selector.
This class represents a property in a property form.
This class represents a checkbox property in a property form.
This class represents an option in a checkbox group.
Confirmation screen class.
This class provides processing control methods.
input GUI for a time span (start and end date)
This class represents a date/time property in a property form.
@classDescription Date and time handling
This class represents a duration (typical hh:mm:ss) property in a property form.
Class ilECSTestSettings.
This class represents a property in a property form.
This class represents a section header in a property form.
language handling
This class represents a number property in a property form.
Class ilObjTestGUI.
__construct(ilCtrl $ctrl, ilAccessHandler $access, ilLanguage $lng, ilTree $tree, ilDBInterface $db, ilPluginAdmin $pluginAdmin, ilObjUser $activeUser, ilObjTestGUI $testGUI)
Constructor.
saveQuestionBehaviourProperties(ilPropertyFormGUI $form)
confirmedResetTemplateCmd()
Enable all settings - remove template.
showResetTemplateConfirmationCmd()
Enable all settings - Confirmation.
isSkillServiceSettingToBeAdjusted(ilPropertyFormGUI $form)
showConfirmation(ilPropertyFormGUI $form, $oldQuestionSetType, $newQuestionSetType, $hasQuestionsWithoutQuestionpool)
addQuestionBehaviourProperties(ilPropertyFormGUI $form)
const QUESTION_SET_TYPE_DYNAMIC
type setting value for dynamic question set (continues testing mode)
const QUESTION_SET_TYPE_RANDOM
type setting value for random question set
const QUESTION_SET_TYPE_FIXED
type setting value for fixed question set
static isSkillManagementGloballyActivated()
static initServiceSettingsForm($a_obj_id, ilPropertyFormGUI $form, $services)
Init service settings form.
static updateServiceSettingsForm($a_obj_id, ilPropertyFormGUI $form, $services)
Update service settings.
static _getAllReferences($a_id)
get all reference ids of object
Administration class for plugins.
This class represents a property form user interface.
addItem($a_item)
Add Item (Property, SectionHeader).
getInput($a_post_var, $ensureValidation=true)
Returns the value of a HTTP-POST variable, identified by the passed id.
getItemByPostVar($a_post_var)
Get Item by POST variable.
This class represents a property in a property form.
This class represents an option in a radio group.
formPropertyExists(ilPropertyFormGUI $form, $propertyId)
getTemplateSettingValue($settingName)
removeHiddenItems(ilPropertyFormGUI $form)
This class represents a text area property in a property form.
This class represents a text property in a property form.
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
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.
static getSystemMessageHTML($a_txt, $a_type="info")
Get HTML for a system message.
$password
Definition: cron.php:14
const REDIRECT_NONE
Redirect after finishing test constants.
const REDIRECT_ALWAYS
const REDIRECT_KIOSK
Interface ilAccessHandler.
Interface ilDBInterface.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $ilSetting
Definition: privfeed.php:17
$errors
$DIC
Definition: xapitoken.php:46