4 require_once
'Modules/Test/classes/class.ilTestSettingsGUI.php';
5 require_once
'Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php';
100 require_once
'Modules/Test/classes/class.ilTestQuestionSetConfigFactory.php';
103 parent::__construct($testGUI->object);
113 if (!$this->access->checkAccess(
"write",
"", $this->testGUI->ref_id)) {
115 $this->ctrl->redirect($this->testGUI,
"infoScreen");
120 $nextClass = $this->ctrl->getNextClass();
122 switch ($nextClass) {
124 $cmd = $this->ctrl->getCmd(self::CMD_SHOW_FORM) .
'Cmd';
131 $this->tpl->addJavascript(
"./Services/JavaScript/js/Basic.js");
133 if (
$form === null) {
137 $formHTML = $this->ctrl->getHTML(
$form);
140 $this->tpl->setContent($formHTML . $msgHTML);
145 require_once
'Modules/Test/classes/confirmations/class.ilTestSettingsChangeConfirmationGUI.php';
148 $confirmation->setFormAction($this->ctrl->getFormAction($this));
149 $confirmation->setCancel($this->lng->txt(
'cancel'), self::CMD_SHOW_FORM);
150 $confirmation->setConfirm($this->lng->txt(
'confirm'), self::CMD_CONFIRMED_SAVE_FORM);
152 $confirmation->setOldQuestionSetType($oldQuestionSetType);
153 $confirmation->setNewQuestionSetType($newQuestionSetType);
154 $confirmation->setQuestionLossInfoEnabled($hasQuestionsWithoutQuestionpool);
155 $confirmation->build();
157 $confirmation->populateParametersFromPropertyForm($form, $this->activeUser->getTimeZone());
159 $this->tpl->setContent($this->ctrl->getHTML($confirmation));
164 if ($this->settingsTemplate) {
165 $title = $this->settingsTemplate->getTitle();
167 if ($this->settingsTemplate->getAutoGenerated()) {
173 $link = $this->ctrl->getLinkTarget($this, self::CMD_SHOW_RESET_TPL_CONFIRM);
174 $link =
"<a href=\"" . $link .
"\">" . $this->lng->txt(
"test_using_template_link") .
"</a>";
176 $msgHTML = $tpl->getMessageHTML(
177 sprintf($this->lng->txt(
"test_using_template"),
$title, $link),
181 $msgHTML =
"<div style=\"margin-top:10px\">$msgHTML</div>";
201 $form->setValuesByPost();
214 $currentQuestionSetConfig = $this->testQuestionSetConfigFactory->getQuestionSetConfig();
215 if (
$form->getItemByPostVar(
'online')->getChecked() && !$this->testOBJ->isComplete($currentQuestionSetConfig)) {
216 $form->getItemByPostVar(
'online')->setAlert(
217 $this->lng->txt(
"cannot_switch_to_online_no_questions_andor_no_mark_steps")
226 $qstSetSetting =
$form->getItemByPostVar(
'question_set_type');
227 $qTitleSetting =
$form->getItemByPostVar(
'title_output');
230 $qstSetSetting->setAlert($this->lng->txt(
'tst_conflicting_setting'));
231 $qTitleSetting->setAlert($this->lng->txt(
'tst_conflicting_setting'));
242 $questionSetTypeRelatingDataCleanupRequired =
false;
244 $oldQuestionSetType = $this->testOBJ->getQuestionSetType();
246 $newQuestionSetType =
$form->getItemByPostVar(
'question_set_type')->getValue();
248 if (!$this->testOBJ->participantDataExist() && $newQuestionSetType != $oldQuestionSetType) {
249 $oldQuestionSetConfig = $this->testQuestionSetConfigFactory->getQuestionSetConfigByType(
253 if ($oldQuestionSetConfig->doesQuestionSetRelatedDataExist()) {
254 if (!$isConfirmedSave) {
260 $this->testOBJ->hasQuestionsWithoutQuestionpool()
272 $questionSetTypeRelatingDataCleanupRequired =
true;
275 if (
$form->getItemByPostVar(
'online')->getChecked()) {
276 $form->getItemByPostVar(
'online')->setChecked(
false);
278 if ($this->testOBJ->isOnline()) {
279 $infoMsg[] = $this->lng->txt(
"tst_set_offline_due_to_switched_question_set_type_setting");
281 $infoMsg[] = $this->lng->txt(
"tst_cannot_online_due_to_switched_quest_set_type_setting");
286 $newQuestionSetType = $oldQuestionSetType;
292 $form->getItemByPostVar(
'chb_use_previous_answers')->setChecked(
false);
297 if (
$form->getItemByPostVar(
'obligations_enabled')->getChecked()) {
298 switch (
$form->getItemByPostVar(
'instant_feedback_handling')->getValue()) {
299 case self::INST_FB_HANDLING_OPT_FREEZE:
301 $form->getItemByPostVar(
'instant_feedback_handling')->setValue(self::INST_FB_HANDLING_OPT_NONE);
302 $infoMsg[] = $this->lng->txt(
"tst_conflict_fbh_oblig_quest");
303 $infoMsg[] = $this->lng->txt(
"tst_conflict_reset_non_fbh");
306 case self::INST_FB_HANDLING_OPT_FORCE_AND_FREEZE:
308 $form->getItemByPostVar(
'instant_feedback_handling')->setValue(self::INST_FB_HANDLING_OPT_FORCE);
309 $infoMsg[] = $this->lng->txt(
"tst_conflict_fbh_oblig_quest");
310 $infoMsg[] = $this->lng->txt(
"tst_conflict_reset_fbh_force");
321 if ($questionSetTypeRelatingDataCleanupRequired) {
322 $oldQuestionSetConfig->removeQuestionSetRelatedData();
327 if (!$this->testOBJ->participantDataExist() && !$this->testOBJ->getFixedParticipants()) {
328 foreach ($this->testOBJ->getInvitedUsers() as $usrId => $usrData) {
329 $this->testOBJ->disinviteUser($usrId);
335 if (count($infoMsg)) {
340 $this->ctrl->redirect($this, self::CMD_SHOW_FORM);
348 require_once
'Services/Utilities/classes/class.ilConfirmationGUI.php';
351 $confirmationGUI->setFormAction($this->ctrl->getFormAction($this));
352 $confirmationGUI->setHeaderText($this->lng->txt(
"test_confirm_template_reset"));
353 $confirmationGUI->setCancel($this->lng->txt(
'cancel'), self::CMD_SHOW_FORM);
354 $confirmationGUI->setConfirm($this->lng->txt(
'confirm'), self::CMD_CONFIRMED_RESET_TPL);
356 $this->tpl->setContent($this->ctrl->getHTML($confirmationGUI));
364 $this->testOBJ->setTemplate(null);
365 $this->testOBJ->saveToDB();
368 $this->ctrl->redirect($this, self::CMD_SHOW_FORM);
392 return $ilSetting->get(
'char_selector_availability') > 0;
398 require_once
'Services/Form/classes/class.ilPropertyFormGUI.php';
400 $form->setFormAction($this->ctrl->getFormAction($this));
401 $form->addCommandButton(self::CMD_SAVE_FORM, $this->lng->txt(
"save"));
402 $form->setTableWidth(
"100%");
403 $form->setId(
"test_properties");
415 include_once
'Modules/Test/classes/class.ilECSTestSettings.php';
417 $ecs->addSettingsToForm(
$form,
'tst');
422 $otherHead->setTitle($this->lng->txt(
'other'));
423 $form->addItem($otherHead);
425 $skillService =
new ilCheckboxInputGUI($this->lng->txt(
'tst_activate_skill_service'),
'skill_service');
426 $skillService->
setInfo($this->lng->txt(
'tst_activate_skill_service_desc'));
427 $skillService->setChecked($this->testOBJ->isSkillServiceEnabled());
428 if ($this->testOBJ->participantDataExist()) {
429 $skillService->setDisabled(
true);
431 $form->addItem($skillService);
451 if (!$this->testOBJ->participantDataExist()) {
454 $this->testOBJ->setSkillServiceEnabled($form->
getItemByPostVar(
'skill_service')->getChecked());
459 $this->testOBJ->saveToDb(
true);
462 include_once
'Modules/Test/classes/class.ilECSTestSettings.php';
464 $ecs->handleSettingsUpdate();
473 $header->setTitle($this->lng->txt(
"tst_general_properties"));
478 include_once
'Services/MetaData/classes/class.ilMD.php';
479 $md_obj =
new ilMD($this->testOBJ->getId(), 0,
"tst");
483 $title->setRequired(
true);
484 $title->setValue($md_section->getTitle());
487 $ids = $md_section->getDescriptionIds();
489 $desc_obj = $md_section->getDescription(array_pop($ids));
494 $desc->setValue($desc_obj->getDescription());
499 $pool_usage =
new ilRadioGroupInputGUI($this->lng->txt(
'test_question_pool_usage'),
'use_pool');
501 $optional_qpl =
new ilRadioOption($this->lng->txt(
'test_question_pool_usage_optional'), 1);
502 $optional_qpl->
setInfo($this->lng->txt(
'test_question_pool_usage_optional_info'));
503 $pool_usage->addOption($optional_qpl);
505 $tst_directly =
new ilRadioOption($this->lng->txt(
'test_question_pool_usage_tst_directly'), 0);
506 $tst_directly->
setInfo($this->lng->txt(
'test_question_pool_usage_tst_directly_info'));
507 $pool_usage->addOption($tst_directly);
509 $pool_usage->setValue($this->testOBJ->getPoolUsage() ? 1 : 0);
513 $questSetType =
new ilRadioGroupInputGUI($this->lng->txt(
"tst_question_set_type"),
'question_set_type');
515 $this->lng->txt(
"tst_question_set_type_fixed"),
517 $this->lng->txt(
"tst_question_set_type_fixed_desc")
519 $questSetType->addOption($questSetTypeFixed);
521 $this->lng->txt(
"tst_question_set_type_random"),
523 $this->lng->txt(
"tst_question_set_type_random_desc")
525 $questSetType->addOption($questSetTypeRandom);
527 $this->lng->txt(
"tst_question_set_type_dynamic"),
529 $this->lng->txt(
"tst_question_set_type_dynamic_desc")
531 $questSetType->addOption($questSetTypeContinues);
532 $questSetType->
setValue($this->testOBJ->getQuestionSetType());
533 if ($this->testOBJ->participantDataExist()) {
534 $questSetType->setDisabled(
true);
540 if ($this->testOBJ->participantDataExist()) {
543 $rb =
new ilRadioOption($this->lng->txt(
'tst_anonymity_no_anonymization'), 0);
544 $anonymity->addOption($rb);
545 $rb =
new ilRadioOption($this->lng->txt(
'tst_anonymity_anonymous_test'), 1);
546 $anonymity->addOption($rb);
547 $anonymity->
setValue((
int) $this->testOBJ->getAnonymity());
556 include_once
'Services/MetaData/classes/class.ilMD.php';
557 $md_obj =
new ilMD($this->testOBJ->getId(), 0,
"tst");
565 $md_desc_ids = $md_section->getDescriptionIds();
567 $md_desc = $md_section->getDescription(array_pop($md_desc_ids));
571 $md_desc = $md_section->addDescription();
578 $this->testOBJ->update();
582 $this->testOBJ->setPoolUsage((
int) $form->
getItemByPostVar(
'use_pool')->getValue());
585 if (!$this->testOBJ->participantDataExist()) {
588 $this->testOBJ->setQuestionSetType($form->
getItemByPostVar(
'question_set_type')->getValue());
593 if (!$this->testOBJ->participantDataExist() && $this->
formPropertyExists($form,
'anonymity')) {
594 $this->testOBJ->setAnonymity($form->
getItemByPostVar(
'anonymity')->getValue());
603 include_once
"Services/Object/classes/class.ilObjectActivation.php";
604 $this->lng->loadLanguageModule(
'rep');
607 $section->setTitle($this->lng->txt(
'rep_activation_availability'));
611 $act_obj_info = $act_ref_info =
"";
613 $act_obj_info =
' ' . $this->lng->txt(
'rep_activation_online_object_info');
614 $act_ref_info = $this->lng->txt(
'rep_activation_access_ref_info');
618 $online->
setChecked($this->testOBJ->isOnline());
619 $online->setInfo($this->lng->txt(
'tst_activation_online_info') . $act_obj_info);
622 $act_type =
new ilCheckboxInputGUI($this->lng->txt(
'rep_visibility_until'),
'activation_type');
623 $act_type->
setChecked($this->testOBJ->isActivationLimited());
626 $this->tpl->addJavaScript(
'./Services/Form/js/date_duration.js');
627 include_once
"Services/Form/classes/class.ilDateDurationInputGUI.php";
630 $date = $this->testOBJ->getActivationStartingTime();
632 $dur->setStartText($this->lng->txt(
'rep_activation_limited_start'));
633 $date = $this->testOBJ->getActivationEndingTime();
635 $dur->setEndText($this->lng->txt(
'rep_activation_limited_end'));
636 $act_type->addSubItem($dur);
638 $visible =
new ilCheckboxInputGUI($this->lng->txt(
'rep_activation_limited_visibility'),
'activation_visibility');
639 $visible->
setInfo($this->lng->txt(
'tst_activation_limited_visibility_info'));
640 $visible->setChecked($this->testOBJ->getActivationVisibility());
641 $act_type->addSubItem($visible);
656 $this->testOBJ->setActivationLimited(
true);
657 $this->testOBJ->setActivationVisibility($form->
getItemByPostVar(
'activation_visibility')->getChecked());
660 $this->testOBJ->setActivationStartingTime($period->getStart()->get(
IL_CAL_UNIX));
661 $this->testOBJ->setActivationEndingTime($period->getEnd()->get(
IL_CAL_UNIX));
663 $this->testOBJ->setActivationLimited(
false);
673 $section->setTitle($this->lng->txt(
'tst_settings_header_intro'));
677 $introEnabled =
new ilCheckboxInputGUI($this->lng->txt(
"tst_introduction"),
'intro_enabled');
678 $introEnabled->
setChecked($this->testOBJ->isIntroductionEnabled());
679 $introEnabled->setInfo($this->lng->txt(
'tst_introduction_desc'));
681 $intro =
new ilTextAreaInputGUI($this->lng->txt(
"tst_introduction_text"),
"introduction");
683 $intro->setValue($this->testOBJ->prepareTextareaOutput($this->testOBJ->getIntroduction(),
false,
true));
686 $intro->setUseRte(
true);
687 $intro->addPlugin(
"latex");
688 $intro->addButton(
"latex");
689 $intro->setRTESupport($this->testOBJ->getId(),
"tst",
"assessment");
690 $intro->setRteTagSet(
'full');
691 $introEnabled->addSubItem($intro);
696 $showinfo->setChecked($this->testOBJ->getShowInfo());
697 $showinfo->setInfo($this->lng->txt(
"showinfo_desc"));
707 $this->testOBJ->setIntroductionEnabled($form->
getItemByPostVar(
'intro_enabled')->getChecked());
712 $this->testOBJ->setIntroduction(
'');
717 $this->testOBJ->setShowInfo($form->
getItemByPostVar(
'showinfo')->getChecked());
727 $header->setTitle($this->lng->txt(
"tst_settings_header_execution"));
731 $startingtime =
new ilDateTimeInputGUI($this->lng->txt(
"tst_starting_time"),
'starting_time');
732 $startingtime->
setInfo($this->lng->txt(
"tst_starting_time_desc"));
733 $startingtime->setShowTime(
true);
734 if ($this->testOBJ->getStartingTime() != 0) {
737 $startingtime->setDate(null);
741 if ($this->testOBJ->participantDataExist()) {
742 $startingtime->setDisabled(
true);
746 $endingtime =
new ilDateTimeInputGUI($this->lng->txt(
"tst_ending_time"),
'ending_time');
747 $endingtime->
setInfo($this->lng->txt(
"tst_ending_time_desc"));
748 $endingtime->setShowTime(
true);
749 if ($this->testOBJ->getEndingTime() != 0) {
752 $endingtime->setDate(null);
757 $pwEnabled =
new ilCheckboxInputGUI($this->lng->txt(
'tst_password'),
'password_enabled');
758 $pwEnabled->
setChecked($this->testOBJ->isPasswordEnabled());
759 $pwEnabled->setInfo($this->lng->txt(
"tst_password_details"));
764 $password->setValue($this->testOBJ->getPassword());
769 $fixedparticipants =
new ilCheckboxInputGUI($this->lng->txt(
'participants_invitation'),
"fixedparticipants");
771 $fixedparticipants->setChecked($this->testOBJ->getFixedParticipants());
772 $fixedparticipants->setInfo($this->lng->txt(
"participants_invitation_description"));
773 if ($this->testOBJ->participantDataExist()) {
774 $fixedparticipants->setDisabled(
true);
776 $form->
addItem($fixedparticipants);
779 $simulLimited =
new ilCheckboxInputGUI($this->lng->txt(
"tst_allowed_users"),
'limitUsers');
780 $simulLimited->
setInfo($this->lng->txt(
"tst_allowed_users_desc"));
781 $simulLimited->setChecked($this->testOBJ->isLimitUsersEnabled());
784 $simul =
new ilNumberInputGUI($this->lng->txt(
"tst_allowed_users_max"),
"allowedUsers");
786 $simul->allowDecimals(
false);
787 $simul->setMinValue(1);
788 $simul->setMinvalueShouldBeGreater(
false);
790 $simul->setValue(($this->testOBJ->getAllowedUsers()) ? $this->testOBJ->getAllowedUsers() :
'');
791 $simulLimited->addSubItem($simul);
794 $idle =
new ilNumberInputGUI($this->lng->txt(
"tst_allowed_users_time_gap"),
"allowedUsersTimeGap");
795 $idle->
setInfo($this->lng->txt(
"tst_allowed_users_time_gap_desc"));
797 $idle->setSuffix($this->lng->txt(
"seconds"));
798 $idle->setValue(($this->testOBJ->getAllowedUsersTimeGap()) ? $this->testOBJ->getAllowedUsersTimeGap() : 300);
799 $simulLimited->addSubItem($idle);
810 if (!$this->testOBJ->participantDataExist()) {
814 $this->testOBJ->setStartingTime($starting_time->getUnixtime());
815 $this->testOBJ->setStartingTimeEnabled(
true);
817 $this->testOBJ->setStartingTime(null);
818 $this->testOBJ->setStartingTimeEnabled(
false);
825 $this->testOBJ->setEndingTime($ending_time->getUnixtime());
826 $this->testOBJ->setEndingTimeEnabled(
true);
828 $this->testOBJ->setEndingTime(null);
829 $this->testOBJ->setEndingTimeEnabled(
false);
833 $this->testOBJ->setPasswordEnabled($form->
getItemByPostVar(
'password_enabled')->getChecked());
836 $this->testOBJ->setPassword($form->
getItemByPostVar(
'password')->getValue());
838 $this->testOBJ->setPassword(
'');
842 if ($this->
formPropertyExists($form,
'fixedparticipants') && !$this->testOBJ->participantDataExist()) {
843 $this->testOBJ->setFixedParticipants($form->
getItemByPostVar(
'fixedparticipants')->getChecked());
847 $this->testOBJ->setLimitUsersEnabled($form->
getItemByPostVar(
'limitUsers')->getChecked());
850 $this->testOBJ->setAllowedUsers($form->
getItemByPostVar(
'allowedUsers')->getValue());
851 $this->testOBJ->setAllowedUsersTimeGap($form->
getItemByPostVar(
'allowedUsersTimeGap')->getValue());
853 $this->testOBJ->setAllowedUsers(
'');
865 $header->setTitle($this->lng->txt(
"tst_settings_header_test_run"));
869 $limitPasses =
new ilCheckboxInputGUI($this->lng->txt(
"tst_limit_nr_of_tries"),
'limitPasses');
870 $limitPasses->
setInfo($this->lng->txt(
"tst_nr_of_tries_desc"));
871 $limitPasses->setChecked($this->testOBJ->getNrOfTries() > 0);
872 $nr_of_tries =
new ilNumberInputGUI($this->lng->txt(
"tst_nr_of_tries"),
"nr_of_tries");
874 $nr_of_tries->allowDecimals(
false);
875 $nr_of_tries->setMinValue(1);
876 $nr_of_tries->setMinvalueShouldBeGreater(
false);
877 $nr_of_tries->setValue($this->testOBJ->getNrOfTries() ? $this->testOBJ->getNrOfTries() : 1);
878 $nr_of_tries->setRequired(
true);
879 if ($this->testOBJ->participantDataExist()) {
880 $limitPasses->setDisabled(
true);
881 $nr_of_tries->setDisabled(
true);
883 $limitPasses->addSubItem($nr_of_tries);
887 $pass_waiting_enabled =
new ilCheckboxInputGUI($this->lng->txt(
'tst_pass_waiting_enabled'),
'pass_waiting_enabled');
888 $pass_waiting_enabled->
setInfo($this->lng->txt(
'tst_pass_waiting_info'));
889 $pass_waiting_enabled->setChecked($this->testOBJ->isPassWaitingEnabled());
892 $duration =
new ilDurationInputGUI($this->lng->txt(
"tst_pass_waiting_time"),
"pass_waiting");
895 $duration->setShowDays(
true);
896 $duration->setShowHours(
true);
897 $duration->setShowMinutes(
true);
899 $pw_time_array = explode(
':', $this->testOBJ->getPassWaiting());
900 $duration->setMonths($pw_time_array[0]);
901 $duration->setDays($pw_time_array[1]);
902 $duration->setHours($pw_time_array[2]);
903 $duration->setMinutes($pw_time_array[3]);
904 $duration->setRequired(
false);
905 $pass_waiting_enabled->addSubItem($duration);
907 $form->
addItem($pass_waiting_enabled);
910 $processing =
new ilCheckboxInputGUI($this->lng->txt(
"tst_processing_time"),
"chb_processing_time");
911 $processing->
setInfo($this->lng->txt(
"tst_processing_time_desc"));
912 $processing->setValue(1);
915 $processing->setChecked(
true);
917 $processing->setChecked($this->testOBJ->getEnableProcessingTime());
921 $processingtime =
new ilNumberInputGUI($this->lng->txt(
"tst_processing_time_duration"),
'processing_time');
923 $processingtime->setMinValue(1);
924 $processingtime->setMinvalueShouldBeGreater(
false);
925 $processingtime->setValue($this->testOBJ->getProcessingTimeAsMinutes());
926 $processingtime->setSize(5);
927 $processingtime->setSuffix($this->lng->txt(
'minutes'));
928 $processingtime->setInfo($this->lng->txt(
"tst_processing_time_duration_desc"));
929 $processing->addSubItem($processingtime);
933 $resetprocessing->setValue(1);
934 $resetprocessing->setOptionTitle($this->lng->txt(
"tst_reset_processing_time"));
935 $resetprocessing->setChecked($this->testOBJ->getResetProcessingTime());
936 $resetprocessing->setInfo($this->lng->txt(
"tst_reset_processing_time_desc"));
937 $processing->addSubItem($resetprocessing);
940 if ($this->testOBJ->participantDataExist()) {
941 $processing->setDisabled(
true);
942 $processingtime->setDisabled(
true);
943 $resetprocessing->setDisabled(
true);
945 $duration->setDisabled(
true);
946 $pass_waiting_enabled->setDisabled(
true);
952 $kiosk->setChecked($this->testOBJ->getKioskMode());
953 $kiosk->setInfo($this->lng->txt(
"kiosk_description"));
958 $kiosktitle->addOption(
new ilCheckboxOption($this->lng->txt(
"kiosk_show_participant"),
'kiosk_participant',
''));
960 if ($this->testOBJ->getShowKioskModeTitle()) {
961 array_push($values,
'kiosk_title');
963 if ($this->testOBJ->getShowKioskModeParticipant()) {
964 array_push($values,
'kiosk_participant');
966 $kiosktitle->setValue($values);
967 $kiosktitle->setInfo($this->lng->txt(
"kiosk_options_desc"));
968 $kiosk->addSubItem($kiosktitle);
972 $examIdInPass =
new ilCheckboxInputGUI($this->lng->txt(
'examid_in_test_pass'),
'examid_in_test_pass');
973 $examIdInPass->
setInfo($this->lng->txt(
'examid_in_test_pass_desc'));
974 $examIdInPass->setChecked($this->testOBJ->isShowExamIdInTestPassEnabled());
983 if (!$this->testOBJ->participantDataExist()) {
987 $this->testOBJ->setNrOfTries($form->
getItemByPostVar(
'nr_of_tries')->getValue());
989 $this->testOBJ->setNrOfTries(0);
998 $pass_waiting_duration[] = sprintf(
"%'.02d", $pass_waiting_values->getMonths());
999 $pass_waiting_duration[] = sprintf(
"%'.03d", $pass_waiting_values->getDays());
1000 $pass_waiting_duration[] = sprintf(
"%'.02d", $pass_waiting_values->getHours());
1001 $pass_waiting_duration[] = sprintf(
"%'.02d", $pass_waiting_values->getMinutes());
1002 $pass_waiting_duration[] = sprintf(
"%'.02d", $pass_waiting_values->getSeconds());
1004 $pass_waiting_string = implode(
':', $pass_waiting_duration);
1005 $this->testOBJ->setPassWaiting($pass_waiting_string);
1007 $this->testOBJ->setPassWaiting(
"00:000:00:00:00");
1011 $this->testOBJ->setEnableProcessingTime($form->
getItemByPostVar(
'chb_processing_time')->getChecked());
1012 if ($this->testOBJ->getEnableProcessingTime()) {
1013 $this->testOBJ->setProcessingTimeByMinutes($form->
getItemByPostVar(
'processing_time')->getValue());
1014 $this->testOBJ->setResetProcessingTime($form->
getItemByPostVar(
'chb_reset_processing_time')->getChecked());
1016 $this->testOBJ->setProcessingTime(
'');
1017 $this->testOBJ->setResetProcessingTime(
false);
1022 $this->testOBJ->setKioskMode($form->
getInput(
'kiosk'));
1024 if (is_array($kioskOptions)) {
1025 $this->testOBJ->setShowKioskModeTitle(in_array(
'kiosk_title', $kioskOptions));
1026 $this->testOBJ->setShowKioskModeParticipant(in_array(
'kiosk_participant', $kioskOptions));
1028 $this->testOBJ->setShowKioskModeTitle(
false);
1029 $this->testOBJ->setShowKioskModeParticipant(
false);
1035 $this->testOBJ->setShowExamIdInTestPassEnabled($value);
1045 'title_output',
'autosave',
'chb_shuffle_questions',
'chb_shuffle_questions',
1046 'offer_hints',
'instant_feedback',
'obligations_enabled',
1052 $seqheader->setTitle($this->lng->txt(
"tst_presentation_properties"));
1059 $title_output->addOption(
new ilRadioOption($this->lng->txt(
"tst_title_output_hide_points"), 1,
''));
1060 $title_output->addOption(
new ilRadioOption($this->lng->txt(
"tst_title_output_no_title"), 2,
''));
1061 $title_output->setValue($this->testOBJ->getTitleOutput());
1062 $form->
addItem($title_output);
1067 $autosave_output->setChecked($this->testOBJ->getAutosave());
1068 $autosave_output->setInfo($this->lng->txt(
'autosave_info'));
1069 $autosave_interval =
new ilTextInputGUI($this->lng->txt(
'autosave_ival'),
'autosave_ival');
1070 $autosave_interval->
setSize(10);
1071 $autosave_interval->setValue($this->testOBJ->getAutosaveIval()/1000);
1072 $autosave_interval->setSuffix($this->lng->txt(
'seconds'));
1073 $autosave_output->addSubItem($autosave_interval);
1074 $form->
addItem($autosave_output);
1077 $shuffle =
new ilCheckboxInputGUI($this->lng->txt(
"tst_shuffle_questions"),
"chb_shuffle_questions");
1079 $shuffle->setChecked($this->testOBJ->getShuffleQuestions());
1080 $shuffle->setInfo($this->lng->txt(
"tst_shuffle_questions_description"));
1084 $checkBoxOfferHints =
new ilCheckboxInputGUI($this->lng->txt(
'tst_setting_offer_hints_label'),
'offer_hints');
1085 $checkBoxOfferHints->
setChecked($this->testOBJ->isOfferingQuestionHintsEnabled());
1086 $checkBoxOfferHints->setInfo($this->lng->txt(
'tst_setting_offer_hints_info'));
1087 if ($this->testOBJ->participantDataExist()) {
1088 $checkBoxOfferHints->setDisabled(
true);
1090 $form->
addItem($checkBoxOfferHints);
1095 $this->lng->txt(
'tst_instant_feedback_results'),
1096 'instant_feedback_points',
1097 $this->lng->txt(
'tst_instant_feedback_results_desc')
1100 $this->lng->txt(
'tst_instant_feedback_answer_generic'),
1101 'instant_feedback_generic',
1102 $this->lng->txt(
'tst_instant_feedback_answer_generic_desc')
1105 $this->lng->txt(
'tst_instant_feedback_answer_specific'),
1106 'instant_feedback_specific',
1107 $this->lng->txt(
'tst_instant_feedback_answer_specific_desc')
1110 $this->lng->txt(
'tst_instant_feedback_solution'),
1111 'instant_feedback_solution',
1112 $this->lng->txt(
'tst_instant_feedback_solution_desc')
1115 if ($this->testOBJ->getSpecificAnswerFeedback()) {
1116 array_push($values,
'instant_feedback_specific');
1118 if ($this->testOBJ->getGenericAnswerFeedback()) {
1119 array_push($values,
'instant_feedback_generic');
1121 if ($this->testOBJ->getAnswerFeedbackPoints()) {
1122 array_push($values,
'instant_feedback_points');
1124 if ($this->testOBJ->getInstantFeedbackSolution()) {
1125 array_push($values,
'instant_feedback_solution');
1127 $instant_feedback->setValue($values);
1128 $form->
addItem($instant_feedback);
1131 $this->lng->txt(
'tst_instant_feedback_handling'),
1132 'instant_feedback_handling' 1134 if ($this->testOBJ->participantDataExist()) {
1138 $this->lng->txt(
'tst_instant_feedback_handling_none'),
1139 self::INST_FB_HANDLING_OPT_NONE
1141 $radioOption->
setInfo($this->lng->txt(
'tst_instant_feedback_handling_none_desc'));
1142 $radioGroup->addOption($radioOption);
1144 $this->lng->txt(
'tst_instant_feedback_handling_freeze'),
1145 self::INST_FB_HANDLING_OPT_FREEZE
1147 $radioOption->
setInfo($this->lng->txt(
'tst_instant_feedback_handling_freeze_desc'));
1148 $radioGroup->addOption($radioOption);
1150 $this->lng->txt(
'tst_instant_feedback_handling_force_and_freeze'),
1151 self::INST_FB_HANDLING_OPT_FORCE_AND_FREEZE
1153 $radioOption->
setInfo($this->lng->txt(
'tst_instant_feedback_handling_force_and_freeze_desc'));
1154 $radioGroup->addOption($radioOption);
1156 $this->lng->txt(
'tst_instant_feedback_handling_force'),
1157 self::INST_FB_HANDLING_OPT_FORCE
1159 $radioOption->
setInfo($this->lng->txt(
'tst_instant_feedback_handling_force_desc'));
1160 $radioGroup->addOption($radioOption);
1162 $this->testOBJ->isInstantFeedbackAnswerFixationEnabled(),
1163 $this->testOBJ->isForceInstantFeedbackEnabled()
1168 $checkBoxEnableObligations =
new ilCheckboxInputGUI($this->lng->txt(
'tst_setting_enable_obligations_label'),
'obligations_enabled');
1169 $checkBoxEnableObligations->
setChecked($this->testOBJ->areObligationsEnabled());
1170 $checkBoxEnableObligations->setInfo($this->lng->txt(
'tst_setting_enable_obligations_info'));
1171 if ($this->testOBJ->participantDataExist()) {
1172 $checkBoxEnableObligations->setDisabled(
true);
1174 $form->
addItem($checkBoxEnableObligations);
1178 require_once
'Services/UIComponent/CharSelector/classes/class.ilCharSelectorGUI.php';
1180 $char_selector->getConfig()->setAvailability($this->testOBJ->getCharSelectorAvailability());
1181 $char_selector->getConfig()->setDefinition($this->testOBJ->getCharSelectorDefinition());
1182 $char_selector->addFormProperties($form);
1183 $char_selector->setFormValues($form);
1193 $this->testOBJ->setTitleOutput($form->
getItemByPostVar(
'title_output')->getValue());
1197 $this->testOBJ->setAutosave($form->
getItemByPostVar(
'autosave')->getChecked());
1198 $this->testOBJ->setAutosaveIval($form->
getItemByPostVar(
'autosave_ival')->getValue() * 1000);
1202 $this->testOBJ->setShuffleQuestions($form->
getItemByPostVar(
'chb_shuffle_questions')->getChecked());
1205 if (!$this->testOBJ->participantDataExist() && $this->
formPropertyExists($form,
'offer_hints')) {
1206 $this->testOBJ->setOfferingQuestionHintsEnabled($form->
getItemByPostVar(
'offer_hints')->getChecked());
1210 $this->testOBJ->setScoringFeedbackOptionsByArray($form->
getItemByPostVar(
'instant_feedback')->getValue());
1213 if (!$this->testOBJ->participantDataExist() && $this->
formPropertyExists($form,
'instant_feedback_handling')) {
1217 if (!$this->testOBJ->participantDataExist() && $this->
formPropertyExists($form,
'obligations_enabled')) {
1218 $this->testOBJ->setObligationsEnabled($form->
getItemByPostVar(
'obligations_enabled')->getChecked());
1222 require_once
'Services/UIComponent/CharSelector/classes/class.ilCharSelectorGUI.php';
1224 $char_selector->addFormProperties($form);
1225 $char_selector->getFormValues($form);
1226 $this->testOBJ->setCharSelectorAvailability($char_selector->getConfig()->getAvailability());
1227 $this->testOBJ->setCharSelectorDefinition($char_selector->getConfig()->getDefinition());
1238 $seqheader->setTitle($this->lng->txt(
"tst_sequence_properties"));
1242 $prevanswers =
new ilCheckboxInputGUI($this->lng->txt(
"tst_use_previous_answers"),
"chb_use_previous_answers");
1244 $prevanswers->setChecked($this->testOBJ->getUsePreviousAnswers());
1245 $prevanswers->setInfo($this->lng->txt(
"tst_use_previous_answers_description"));
1249 $cancel =
new ilCheckboxInputGUI($this->lng->txt(
"tst_show_cancel"),
"chb_show_cancel");
1251 $cancel->setChecked($this->testOBJ->getShowCancel());
1252 $cancel->setInfo($this->lng->txt(
"tst_show_cancel_description"));
1258 $this->lng->txt(
"tst_postpone_off"),
1260 $this->lng->txt(
"tst_postpone_off_desc")
1263 $this->lng->txt(
"tst_postpone_on"),
1265 $this->lng->txt(
"tst_postpone_on_desc")
1267 $postpone->setValue((
int) $this->testOBJ->getSequenceSettings());
1271 $list_of_questions =
new ilCheckboxInputGUI($this->lng->txt(
"tst_show_summary"),
"list_of_questions");
1274 $list_of_questions->setChecked($this->testOBJ->getListOfQuestions());
1275 $list_of_questions->setInfo($this->lng->txt(
"tst_show_summary_description"));
1278 $list_of_questions_options->addOption(
new ilCheckboxOption($this->lng->txt(
"tst_list_of_questions_start"),
'chb_list_of_questions_start',
''));
1279 $list_of_questions_options->addOption(
new ilCheckboxOption($this->lng->txt(
"tst_list_of_questions_end"),
'chb_list_of_questions_end',
''));
1280 $list_of_questions_options->addOption(
new ilCheckboxOption($this->lng->txt(
"tst_list_of_questions_with_description"),
'chb_list_of_questions_with_description',
''));
1282 if ($this->testOBJ->getListOfQuestionsStart()) {
1283 array_push($values,
'chb_list_of_questions_start');
1285 if ($this->testOBJ->getListOfQuestionsEnd()) {
1286 array_push($values,
'chb_list_of_questions_end');
1288 if ($this->testOBJ->getListOfQuestionsDescription()) {
1289 array_push($values,
'chb_list_of_questions_with_description');
1291 $list_of_questions_options->setValue($values);
1293 $list_of_questions->addSubItem($list_of_questions_options);
1294 $form->
addItem($list_of_questions);
1297 $marking =
new ilCheckboxInputGUI($this->lng->txt(
"question_marking"),
"chb_show_marker");
1299 $marking->setChecked($this->testOBJ->getShowMarker());
1300 $marking->setInfo($this->lng->txt(
"question_marking_description"));
1310 $this->testOBJ->setUsePreviousAnswers($form->
getInput(
'chb_use_previous_answers'));
1314 $this->testOBJ->setShowCancel($form->
getItemByPostVar(
'chb_show_cancel')->getChecked());
1318 $this->testOBJ->setPostponingEnabled((
bool) $form->
getItemByPostVar(
'postpone')->getValue());
1321 $this->testOBJ->setListOfQuestions($form->
getItemByPostVar(
'list_of_questions')->getChecked());
1322 $listOfQuestionsOptions = $form->
getItemByPostVar(
'list_of_questions_options')->getValue();
1323 if (is_array($listOfQuestionsOptions)) {
1324 $this->testOBJ->setListOfQuestionsStart(in_array(
'chb_list_of_questions_start', $listOfQuestionsOptions));
1325 $this->testOBJ->setListOfQuestionsEnd(in_array(
'chb_list_of_questions_end', $listOfQuestionsOptions));
1326 $this->testOBJ->setListOfQuestionsDescription(in_array(
'chb_list_of_questions_with_description', $listOfQuestionsOptions));
1328 $this->testOBJ->setListOfQuestionsStart(0);
1329 $this->testOBJ->setListOfQuestionsEnd(0);
1330 $this->testOBJ->setListOfQuestionsDescription(0);
1334 $this->testOBJ->setShowMarker($form->
getItemByPostVar(
'chb_show_marker')->getChecked());
1344 $testFinishHeader->setTitle($this->lng->txt(
"tst_final_information"));
1345 $form->
addItem($testFinishHeader);
1348 $enable_examview =
new ilCheckboxInputGUI($this->lng->txt(
"enable_examview"),
'enable_examview');
1350 $enable_examview->setChecked($this->testOBJ->getEnableExamview());
1351 $enable_examview->setInfo($this->lng->txt(
"enable_examview_desc"));
1353 $show_examview_pdf->setValue(1);
1354 $show_examview_pdf->setChecked($this->testOBJ->getShowExamviewPdf());
1355 $show_examview_pdf->setOptionTitle($this->lng->txt(
"show_examview_pdf"));
1356 $enable_examview->addSubItem($show_examview_pdf);
1357 $form->
addItem($enable_examview);
1360 $showfinal =
new ilCheckboxInputGUI($this->lng->txt(
"final_statement"),
"showfinalstatement");
1361 $showfinal->
setChecked($this->testOBJ->getShowFinalStatement());
1362 $showfinal->setInfo($this->lng->txt(
"final_statement_show_desc"));
1365 $finalstatement =
new ilTextAreaInputGUI($this->lng->txt(
"final_statement"),
"finalstatement");
1367 $finalstatement->setValue($this->testOBJ->prepareTextareaOutput($this->testOBJ->getFinalStatement(),
false,
true));
1368 $finalstatement->setRows(10);
1369 $finalstatement->setCols(80);
1370 $finalstatement->setUseRte(
true);
1371 $finalstatement->addPlugin(
"latex");
1372 $finalstatement->addButton(
"latex");
1373 $finalstatement->setRTESupport($this->testOBJ->getId(),
"tst",
"assessment");
1374 $finalstatement->setRteTagSet(
'full');
1375 $showfinal->addSubItem($finalstatement);
1377 $redirection_mode = $this->testOBJ->getRedirectionMode();
1378 $rm_enabled =
new ilCheckboxInputGUI($this->lng->txt(
'redirect_after_finishing_tst'),
'redirection_enabled');
1379 $rm_enabled->
setInfo($this->lng->txt(
'redirect_after_finishing_tst_desc'));
1380 $rm_enabled->setChecked($redirection_mode ==
'0' ?
false :
true);
1381 $radio_rm =
new ilRadioGroupInputGUI($this->lng->txt(
'redirect_after_finishing_rule'),
'redirection_mode');
1383 $radio_rm->addOption($always);
1385 $radio_rm->addOption($kiosk);
1387 $rm_enabled->addSubItem($radio_rm);
1388 $redirection_url =
new ilTextInputGUI($this->lng->txt(
'redirection_url'),
'redirection_url');
1389 $redirection_url->
setValue((
string) $this->testOBJ->getRedirectionUrl());
1390 $redirection_url->setRequired(
true);
1391 $rm_enabled->addSubItem($redirection_url);
1396 $sign_submission = $this->testOBJ->getSignSubmission();
1397 $sign_submission_enabled =
new ilCheckboxInputGUI($this->lng->txt(
'sign_submission'),
'sign_submission');
1398 $sign_submission_enabled->
setChecked($sign_submission);
1399 $sign_submission_enabled->setInfo($this->lng->txt(
'sign_submission_info'));
1400 $form->
addItem($sign_submission_enabled);
1403 $mailnotification =
new ilCheckboxInputGUI($this->lng->txt(
"tst_finish_notification"),
"mailnotification");
1404 $mailnotification->
setInfo($this->lng->txt(
"tst_finish_notification_desc"));
1405 $mailnotification->setChecked($this->testOBJ->getMailNotification() > 0);
1406 $form->
addItem($mailnotification);
1408 $mailnotificationContent =
new ilRadioGroupInputGUI($this->lng->txt(
"tst_finish_notification_content"),
"mailnotification_content");
1409 $mailnotificationContent->
addOption(
new ilRadioOption($this->lng->txt(
"tst_finish_notification_simple"), 1,
''));
1410 $mailnotificationContent->addOption(
new ilRadioOption($this->lng->txt(
"tst_finish_notification_advanced"), 2,
''));
1411 $mailnotificationContent->setValue($this->testOBJ->getMailNotification() ? $this->testOBJ->getMailNotification() : 1);
1412 $mailnotificationContent->setRequired(
true);
1413 $mailnotification->addSubItem($mailnotificationContent);
1416 $mailnottype->setValue(1);
1417 $mailnottype->setOptionTitle($this->lng->txt(
"mailnottype"));
1418 $mailnottype->setChecked($this->testOBJ->getMailNotificationType());
1419 $mailnotification->addSubItem($mailnottype);
1428 $this->testOBJ->setEnableExamview($form->
getItemByPostVar(
'enable_examview')->getChecked());
1429 $this->testOBJ->setShowExamviewPdf($form->
getItemByPostVar(
'show_examview_pdf')->getChecked());
1432 $this->testOBJ->setShowFinalStatement($form->
getItemByPostVar(
'showfinalstatement')->getChecked());
1436 $this->testOBJ->setRedirectionMode($form->
getItemByPostVar(
'redirection_mode')->getValue());
1441 $this->testOBJ->setRedirectionUrl($form->
getItemByPostVar(
'redirection_url')->getValue());
1443 $this->testOBJ->setRedirectionUrl(null);
1447 $this->testOBJ->setSignSubmission($form->
getItemByPostVar(
'sign_submission')->getChecked());
1451 $this->testOBJ->setMailNotification($form->
getItemByPostVar(
'mailnotification_content')->getValue());
1452 $this->testOBJ->setMailNotificationType($form->
getItemByPostVar(
'mailnottype')->getChecked());
1454 $this->testOBJ->setMailNotification(0);
1455 $this->testOBJ->setMailNotificationType(
false);
1461 switch ($instantFeedbackHandlingValue) {
1462 case self::INST_FB_HANDLING_OPT_NONE:
1463 $this->testOBJ->setInstantFeedbackAnswerFixationEnabled(
false);
1464 $this->testOBJ->setForceInstantFeedbackEnabled(
false);
1467 case self::INST_FB_HANDLING_OPT_FREEZE:
1468 $this->testOBJ->setInstantFeedbackAnswerFixationEnabled(
true);
1469 $this->testOBJ->setForceInstantFeedbackEnabled(
false);
1472 case self::INST_FB_HANDLING_OPT_FORCE:
1473 $this->testOBJ->setInstantFeedbackAnswerFixationEnabled(
false);
1474 $this->testOBJ->setForceInstantFeedbackEnabled(
true);
1477 case self::INST_FB_HANDLING_OPT_FORCE_AND_FREEZE:
1478 $this->testOBJ->setInstantFeedbackAnswerFixationEnabled(
true);
1479 $this->testOBJ->setForceInstantFeedbackEnabled(
true);
1487 case !$freezeAnswersEnabled && !$forceInstFbEnabled:
return self::INST_FB_HANDLING_OPT_NONE;
1488 case $freezeAnswersEnabled && !$forceInstFbEnabled:
return self::INST_FB_HANDLING_OPT_FREEZE;
1489 case !$freezeAnswersEnabled && $forceInstFbEnabled:
return self::INST_FB_HANDLING_OPT_FORCE;
1490 case $freezeAnswersEnabled && $forceInstFbEnabled:
return self::INST_FB_HANDLING_OPT_FORCE_AND_FREEZE;
saveGeneralProperties(ilPropertyFormGUI $form)
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
addAvailabilityProperties(ilPropertyFormGUI $form)
saveInstFbHandlingSettings($instantFeedbackHandlingValue)
This class represents an option in a radio group.
This class provides processing control methods.
saveTestFinishProperties(ilPropertyFormGUI $form)
showResetTemplateConfirmationCmd()
Enable all settings - Confirmation.
This class represents an option in a checkbox group.
static _getUsedHTMLTagsAsString($a_module="")
Returns a string of all allowed HTML tags for text editing.
performSaveForm(ilPropertyFormGUI $form)
const QUESTION_SET_TYPE_RANDOM
type setting value for random question set
This shows a character selector.
saveTestSequenceSettings(ilPropertyFormGUI $form)
const CMD_SHOW_RESET_TPL_CONFIRM
removeHiddenItems(ilPropertyFormGUI $form)
const REDIRECT_NONE
Redirect after finishing test constants.
setInfo($a_info)
Set Info.
$testQuestionSetConfigFactory
static _getAllReferences($a_id)
get all reference ids of object
__construct(ilCtrl $ctrl, ilAccessHandler $access, ilLanguage $lng, ilTemplate $tpl, ilTree $tree, ilDBInterface $db, ilPluginAdmin $pluginAdmin, ilObjUser $activeUser, ilObjTestGUI $testGUI)
Constructor.
Interface ilAccessHandler.
Administration class for plugins.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
addQuestionBehaviourProperties(ilPropertyFormGUI $form)
setValue($a_value)
Set Value.
const CMD_CONFIRMED_SAVE_FORM
if(isset($_POST['submit'])) $form
isSectionHeaderRequired($fields)
special template class to simplify handling of ITX/PEAR
setSize($a_size)
Set Size.
addGeneralProperties(ilPropertyFormGUI $form)
This class represents a text property in a property form.
setCols($a_cols)
Set Cols.
saveTestAccessProperties(ilPropertyFormGUI $form)
saveTestIntroProperties(ilPropertyFormGUI $form)
saveQuestionBehaviourProperties(ilPropertyFormGUI $form)
static isSkillManagementGloballyActivated()
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
isCharSelectorPropertyRequired()
const CMD_CONFIRMED_RESET_TPL
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
Create styles array
The data for the language used.
const INST_FB_HANDLING_OPT_FORCE_AND_FREEZE
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
executeCommand()
Command Execution.
addTestFinishProperties(ilPropertyFormGUI $form)
addTestRunProperties(ilPropertyFormGUI $form)
addTestSequenceProperties(ilPropertyFormGUI $form)
addTestIntroProperties(ilPropertyFormGUI $form)
getTemplateSettingValue($settingName)
showConfirmation(ilPropertyFormGUI $form, $oldQuestionSetType, $newQuestionSetType, $hasQuestionsWithoutQuestionpool)
const INST_FB_HANDLING_OPT_FREEZE
getSettingsTemplateMessageHTML()
This class represents a text area property in a property form.
isSkillServiceSettingToBeAdjusted(ilPropertyFormGUI $form)
showFormCmd(ilPropertyFormGUI $form=null)
const INST_FB_HANDLING_OPT_FORCE
const QUESTION_SET_TYPE_FIXED
type setting value for fixed question set
formPropertyExists(ilPropertyFormGUI $form, $propertyId)
const INST_FB_HANDLING_OPT_NONE
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
saveFormCmd($isConfirmedSave=false)
setValue($a_value)
Set Value.
saveTestRunProperties(ilPropertyFormGUI $form)
const QUESTION_SET_TYPE_DYNAMIC
type setting value for dynamic question set (continues testing mode)
addTestAccessProperties(ilPropertyFormGUI $form)
getInstFbHandlingValue($freezeAnswersEnabled, $forceInstFbEnabled)
saveAvailabilityProperties(ilPropertyFormGUI $form)
const CMD_SHOW_FORM
command constants
confirmedResetTemplateCmd()
Enable all settings - remove template.
Confirmation screen class.