19 declare(strict_types=1);
94 case self::TAB_ID_PARTICIPANTS:
95 case self::TAB_ID_YOUR_RESULTS:
96 case self::TAB_ID_SETTINGS:
97 case self::TAB_ID_TEST:
98 case self::TAB_ID_LEARNING_PROGRESS:
99 $this->
tabs->activateTab($tab_id);
105 switch ($sub_tab_id) {
106 case self::SUBTAB_ID_MY_RESULTS:
107 case self::SUBTAB_ID_LO_RESULTS:
108 case self::SUBTAB_ID_HIGHSCORE:
109 case self::SUBTAB_ID_SKILL_RESULTS:
110 case self::SUBTAB_ID_MY_SOLUTIONS:
112 case self::SUBTAB_ID_QST_LIST_VIEW:
113 case self::SUBTAB_ID_QST_PAGE_VIEW:
115 case self::SETTINGS_SUBTAB_ID_GENERAL:
116 case self::SETTINGS_SUBTAB_ID_MARK_SCHEMA:
117 case self::SETTINGS_SUBTAB_ID_SCORING:
118 case self::SETTINGS_SUBTAB_ID_EDIT_INTRODUCTION_PAGE:
119 case self::SETTINGS_SUBTAB_ID_EDIT_CONCLUSION_PAGE:
120 case self::SETTINGS_SUBTAB_ID_CERTIFICATE:
121 case self::SETTINGS_SUBTAB_ID_PERSONAL_DEFAULT_SETTINGS:
122 $this->
tabs->activateSubTab($sub_tab_id);
128 $this->
tabs->clearTargets();
129 $this->
tabs->setBackTarget($this->
lng->txt(
'back'), $back_link_target);
167 return $this->
access->checkAccess(
'read',
'', $this->test_object->getRefId());
172 return $this->
access->checkAccess(
'write',
'', $this->test_object->getRefId());
177 return $this->test_object->getTestLogger()->isLoggingEnabled()
178 && $this->
access->checkAccess(
'tst_history_read',
'', $this->test_object->getRefId());
183 return $this->
access->checkAccess(
'edit_permission',
'', $this->test_object->getRefId());
188 if (!$this->test_access->getAccess()->checkAccess(
'read',
'', $this->test_object->getRefId())) {
192 return \ilLearningProgressAccess::checkAccess($this->test_object->getRefId());
197 if ($this->test_access->checkManageParticipantsAccess()
198 || $this->test_access->checkParticipantsResultsAccess()) {
207 return $this->test_access->checkScoreParticipantsAccess();
219 if (preg_match(
'/^ass(.*?)gui$/i', $this->
ctrl->getNextClass($this))) {
223 if ($this->
ctrl->getNextClass($this) ==
'ilassquestionpagegui') {
227 if ($this->
ctrl->getCmdClass() ==
'iltestoutputgui') {
231 if ($this->
ctrl->getCmdClass() ==
'iltestevaluationgui') {
232 return in_array($this->
ctrl->getCmd(), [
233 '',
'outUserResultsPassOverview',
'outUserListOfAnswerPasses',
'singleResults' 246 $class_path = $this->
ctrl->getCurrentClassPath();
248 switch (array_pop($class_path)) {
249 case MarkSchemaGUI::class:
250 case SettingsMainGUI::class:
251 case SettingsScoringGUI::class:
260 switch ($this->
ctrl->getCmd()) {
265 case 'directfeedback':
267 case 'outCorrectSolution':
268 case 'showAnswersOfUser':
269 case 'backFromSummary':
273 case 'confirmFinish':
274 case 'outTestSummary':
275 case 'outQuestionSummary':
277 case 'selectImagemapRegion':
278 case 'confirmSubmitAnswers':
279 case 'finalSubmission':
281 case 'outUserPassDetails':
282 case 'checkPassword':
283 case 'exportCertificate':
284 case 'finishListOfAnswers':
285 case 'backConfirmFinish':
286 case 'showFinalStatement':
288 case 'browseForQuestions':
291 case 'resetTextFilter':
292 case 'insertQuestions':
294 'iltestdashboardgui',
296 'illearningprogressgui' 298 if (!in_array($this->
ctrl->getNextClass($this), $classes)) {
304 case 'certificateservice':
305 case 'certificateImport':
306 case 'certificateUpload':
307 case 'certificateEditor':
308 case 'certificateDelete':
309 case 'certificateSave':
311 case 'deleteDefaults':
313 case 'applyDefaults':
314 case 'inviteParticipants':
315 case 'searchParticipants':
316 if ($this->
isWriteAccessGranted() && in_array(strtolower($this->
ctrl->getCmdClass()), [
'ilobjtestgui',
'ilcertificategui'])) {
329 $this->
lng->txt(
'test'),
330 $this->
ctrl->getLinkTargetByClass(
332 \ilObjTestGUI::class, TestScreenGUI::class],
340 && !$this->test_object->getMainSettings()->getAdditionalSettings()->getHideInfoTab()) {
341 $this->
tabs->addTarget(
343 $this->
ctrl->getLinkTargetByClass(
345 \ilRepositoryGUI::class,
346 \ilObjTestGUI::class,
347 \ilInfoScreenGUI::class
350 [
'',
'outIntroductionPage',
'setAnonymousId',
'redirectToInfoScreen']
356 $settingsCommands = [
357 'marks',
'showMarkSchema',
'addMarkStep',
'deleteMarkSteps',
358 'resetToSimpleMarkSchema',
'saveMarks',
'certificate',
359 'certificateEditor',
'certificateSave',
360 'certificatePreview',
'certificateDelete',
'certificateUpload',
'certificateImport',
361 'scoring',
'defaults',
'addDefaults',
'deleteDefaults',
'applyDefaults',
362 'inviteParticipants',
'saveFixedParticipantsStatus',
'searchParticipants',
'addParticipants' 365 $reflection = new \ReflectionClass(SettingsMainGUI::class);
366 foreach ($reflection->getConstants() as $name => $value) {
367 if (substr($name, 0, 4) ===
'CMD_') {
368 $settingsCommands[] = $value;
372 $reflection = new \ReflectionClass(SettingsScoringGUI::class);
373 foreach ($reflection->getConstants() as $name => $value) {
374 if (substr($name, 0, 4) ===
'CMD_') {
375 $settingsCommands[] = $value;
379 $settingsCommands[] =
'';
381 $this->
tabs->addTarget(
383 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, SettingsMainGUI::class]),
387 'ilobjtestsettingsmaingui',
388 'ilobjtestsettingsscoringresultsgui',
395 if ($this->test_object->isFixedTest()) {
396 $target = $this->
ctrl->getLinkTargetByClass(
397 \ilObjTestGUI::class,
402 if ($this->test_object->isRandomTest()) {
403 $target = $this->
ctrl->getLinkTargetByClass(\ilTestRandomQuestionSetConfigGUI::class);
407 $this->
tabs->addTarget(
411 'showQuestions',
'browseForQuestions',
'questionBrowser',
'createQuestion',
412 'filter',
'resetFilter',
'insertQuestions',
'back',
413 'executeCreateQuestion',
'cancelCreateQuestion',
414 'addQuestionpool',
'saveRandomQuestions',
'saveQuestionSelectionMode',
'print',
415 'addsource',
'removesource',
'randomQuestions' 422 self::TAB_ID_PARTICIPANTS,
423 $this->
lng->txt(
'participants'),
430 self::TAB_ID_YOUR_RESULTS,
431 $this->
lng->txt(
'your_results'),
437 if ($this->test_object->getGlobalSettings()->isManualScoringEnabled()) {
439 $this->
tabs->addTarget(
440 self::TAB_ID_MANUAL_SCORING,
441 $this->
ctrl->getLinkTargetByClass(
442 [\ilObjTestGUI::class, TestScoringByQuestionGUI::class],
443 'showManScoringByQuestionParticipantsTable' 446 'showManScoringParticipantsTable',
447 'applyManScoringParticipantsFilter',
448 'resetManScoringParticipantsFilter',
449 'showManScoringParticipantScreen',
450 'showManScoringByQuestionParticipantsTable',
451 'applyManScoringByQuestionFilter',
452 'resetManScoringByQuestionFilter',
453 'saveManScoringByQuestion' 461 $this->
tabs->addTarget(
462 self::TAB_ID_HISTORY,
463 $this->
ctrl->getLinkTargetByClass(\ilObjTestGUI::class,
'history'),
470 $this->
tabs->addTarget(
471 self::TAB_ID_LEARNING_PROGRESS,
472 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilLearningProgressGUI::class],
''),
475 'illplistofobjectsgui',
476 'illplistofsettingsgui',
477 'illearningprogressgui',
478 'illplistofprogressgui' 484 $mdgui = new \ilObjectMetaDataGUI($this->test_object);
485 $mdtab = $mdgui->getTab(\ilObjTestGUI::class);
487 $this->
tabs->addTarget(
488 self::TAB_ID_META_DATA,
495 $this->
tabs->addTarget(
497 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilTestExportGUI::class],
''),
504 $this->
tabs->addTarget(
505 self::TAB_ID_PERMISSIONS,
506 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilPermissionGUI::class],
'perm'),
507 [
'perm',
'info',
'owner'],
516 $this->
ctrl->saveParameterByClass($this->
ctrl->getCmdClass(),
'q_id');
518 $this->
tabs->setBackTarget(
519 $this->
lng->txt(
'backtocallingtest'),
522 $this->
tabs->addTarget(
523 'tst_browse_for_questions',
524 $this->
ctrl->getLinkTargetByClass(\ilObjTestGUI::class,
'browseForQuestions'),
525 [
'browseForQuestions',
'filter',
'resetFilter',
'resetTextFilter',
'insertQuestions'],
537 $this->
tabs->setBackTarget(
538 $this->
lng->txt(
'backtocallingtest'),
541 $this->
tabs->addTarget(
543 $this->
ctrl->getLinkTargetByClass(\ilObjTestGUI::class,
'randomQuestions'),
557 $this->
tabs->activateTab(self::TAB_ID_QUESTIONS);
559 if ($this->test_object->isRandomTest()) {
560 $this->
tabs->addSubTabTarget(
561 self::QUESTIONS_SUBTAB_ID_RANDOM_SETTINGS,
562 $this->
ctrl->getLinkTargetByClass(
563 \ilTestRandomQuestionSetConfigGUI::class,
566 [
'',
'showGeneralConfigForm',
'saveGeneralConfigForm']
569 $this->
tabs->addSubTabTarget(
570 self::QUESTIONS_SUBTAB_ID_RANDOM_POOLS,
571 $this->
ctrl->getLinkTargetByClass(
572 \ilTestRandomQuestionSetConfigGUI::class,
575 [
'showSourcePoolDefinitionList']
579 $this->
tabs->addSubTab(
580 self::SUBTAB_ID_QST_LIST_VIEW,
581 $this->
lng->txt(
'edit_test_questions'),
585 if ($this->test_object->isSkillServiceToBeConsidered()) {
586 $this->
tabs->addSubTabTarget(
587 self::SETTINGS_SUBTAB_ID_ASSIGN_SKILLS_TO_QUESTIONS,
588 $this->
ctrl->getLinkTargetByClass(
590 \ilTestSkillAdministrationGUI::class,
591 \ilAssQuestionSkillAssignmentsGUI::class
605 $this->
tabs->addSubTabTarget(
606 self::SETTINGS_SUBTAB_ID_GENERAL,
607 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, SettingsMainGUI::class]),
609 [SettingsMainGUI::class]
612 $this->
tabs->addSubTabTarget(
613 self::SETTINGS_SUBTAB_ID_MARK_SCHEMA,
614 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, MarkSchemaGUI::class],
'showMarkSchema'),
616 [MarkSchemaGUI::class]
619 $this->
tabs->addSubTabTarget(
620 self::SETTINGS_SUBTAB_ID_SCORING,
621 $this->
ctrl->getLinkTargetByClass(
622 [\ilObjTestGUI::class, SettingsScoringGUI::class],
626 [SettingsScoringGUI::class]
629 $this->
ctrl->setParameterByClass(\ilTestPageGUI::class,
'page_type',
'introductionpage');
630 $this->
tabs->addSubTabTarget(
631 self::SETTINGS_SUBTAB_ID_EDIT_INTRODUCTION_PAGE,
632 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilTestPageGUI::class],
'preview'),
636 $this->
ctrl->setParameterByClass(\ilTestPageGUI::class,
'page_type',
'concludingremarkspage');
637 $this->
tabs->addSubTabTarget(
638 self::SETTINGS_SUBTAB_ID_EDIT_CONCLUSION_PAGE,
639 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilTestPageGUI::class],
'preview'),
642 $this->
ctrl->clearParameterByClass(\ilTestPageGUI::class,
'page_type');
644 $validator = new \ilCertificateActiveValidator();
645 if ($validator->validate() ===
true) {
646 $this->
tabs->addSubTabTarget(
647 self::SETTINGS_SUBTAB_ID_CERTIFICATE,
648 $this->
ctrl->getLinkTargetByClass(\ilObjTestGUI::class,
'certificate'),
649 [
'certificate',
'certificateEditor',
'certificateRemoveBackground',
'ceateSave',
650 'certificatePreview',
'certificateDelete',
'certificateUpload',
'certificateImport'],
651 [
'',
'ilobjtestgui',
'ilcertificategui']
655 if ($this->test_object->isSkillServiceToBeConsidered()) {
656 $this->
tabs->addSubTabTarget(
657 self::SETTINGS_SUBTAB_ID_ASSIGN_SKILL_TRESHOLDS,
658 $this->
ctrl->getLinkTargetByClass(
660 \ilTestSkillAdministrationGUI::class,
661 \ilTestSkillLevelThresholdsGUI::class
669 $this->
tabs->addSubTabTarget(
670 self::SETTINGS_SUBTAB_ID_PERSONAL_DEFAULT_SETTINGS,
671 $this->
ctrl->getLinkTargetByClass(\ilObjTestGUI::class,
'defaults'),
672 [
'defaults',
'deleteDefaults',
'addDefaults',
'applyDefaults'],
673 [
'',
'ilobjtestgui',
'ilcertificategui']
676 $lti_settings = new \ilLTIProviderObjectSettingGUI($this->test_object->getRefId());
677 if ($lti_settings->hasSettingsAccess()) {
678 $this->
tabs->addSubTabTarget(
680 $this->
ctrl->getLinkTargetByClass(\ilLTIProviderObjectSettingGUI::class),
682 [\ilLTIProviderObjectSettingGUI::class]
698 if (!($this->test_object->getProcessingTimeInSeconds() > 0)) {
702 if ($this->test_object->getNrOfTries() != 1) {
711 return $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilTestParticipantsGUI::class]);
716 return $this->test_session->reportableResultsAvailable($this->test_object)
717 || $this->test_session->getActiveId() !== 0
718 && $this->test_object->canShowSolutionPrintview($this->test_session->getUserId());
724 return $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilTestResultsGUI::class, \ilTestEvalObjectiveOrientedGUI::class]);
728 return $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilMyTestSolutionsGUI::class, \ilTestEvaluationGUI::class]);
731 return $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilMyTestResultsGUI::class, \ilTestEvaluationGUI::class]);
736 return $this->test_object->isScoreReportingEnabled();
741 if (!$this->test_object->isScoreReportingEnabled()) {
745 return $this->objective_parent->isObjectiveOrientedPresentationRequired();
750 if (!$this->test_object->isScoreReportingEnabled()) {
754 return $this->test_object->getHighscoreEnabled();
759 if (!$this->test_object->isScoreReportingEnabled()) {
763 return $this->test_object->isSkillServiceToBeConsidered();
768 return $this->test_object->canShowSolutionPrintview($this->test_session->getUserId());
774 $this->
tabs->addSubTab(
775 self::SUBTAB_ID_LO_RESULTS,
776 $this->
lng->txt(
'tst_tab_results_objective_oriented'),
777 $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilTestEvalObjectiveOrientedGUI::class])
782 $myResultsLabel = $this->
lng->txt(
'tst_show_results');
785 $myResultsLabel = $this->
lng->txt(
'tst_tab_results_pass_oriented');
788 $this->
tabs->addSubTab(
789 self::SUBTAB_ID_MY_RESULTS,
791 $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilMyTestResultsGUI::class, \ilTestEvaluationGUI::class])
796 $this->
tabs->addSubTab(
797 self::SUBTAB_ID_SKILL_RESULTS,
798 $this->
lng->txt(
'tst_show_comp_results'),
799 $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilTestSkillEvaluationGUI::class])
804 $this->
tabs->addSubTab(
805 self::SUBTAB_ID_HIGHSCORE,
806 $this->
lng->txt(
'tst_show_toplist'),
807 $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilTestToplistGUI::class],
'outResultsToplist')
812 $this->
tabs->addSubTab(
813 self::SUBTAB_ID_MY_SOLUTIONS,
814 $this->
lng->txt(
'tst_list_of_answers_show'),
815 $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilMyTestSolutionsGUI::class, \ilTestEvaluationGUI::class])
activateTab(string $tab_id)
const TAB_ID_PARTICIPANTS
isTabsConfigSetupRequired()
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setParentBackLabel(?string $parent_back_label)
const CMD_SHOW_FORM
command constants
const SETTINGS_SUBTAB_ID_EDIT_INTRODUCTION_PAGE
const TAB_ID_YOUR_RESULTS
__construct(private readonly \ilTabsGUI $tabs, private readonly \ilLanguage $lng, private readonly \ilCtrlInterface $ctrl, private readonly \ilAccess $access, private readonly \ilTestAccess $test_access, private readonly \ilObjTest $test_object, private readonly \ilTestObjectiveOrientedContainer $objective_parent, private readonly \ilTestSession $test_session)
string $parent_back_label
const SUBTAB_ID_MY_RESULTS
const SETTINGS_SUBTAB_ID_ASSIGN_SKILL_TRESHOLDS
checkParticipantsTabAccess()
resetTabsAndAddBacklink(string $back_link_target)
activateSubTab(string $sub_tab_id)
const CMD_SHOW_SRC_POOL_DEF_LIST
needsSkillResultsSubTab()
const SUBTAB_ID_QST_PAGE_VIEW
const SETTINGS_SUBTAB_ID_CERTIFICATE
const SUBTAB_ID_HIGHSCORE
const SUBTAB_ID_GENERAL_SETTINGS
const TAB_ID_LEARNING_PROGRESS
const QUESTIONS_SUBTAB_ID_RANDOM_SETTINGS
const SETTINGS_SUBTAB_ID_EDIT_CONCLUSION_PAGE
getYourResultsTabTarget()
const CMD_SHOW_SKILL_THRESHOLDS
const SUBTAB_ID_QST_LIST_VIEW
const SUBTAB_ID_SKILL_RESULTS
const TAB_ID_QUESTIONS
(Sub-)Tab ID constants
needsYourSolutionsSubTab()
const SETTINGS_SUBTAB_ID_MARK_SCHEMA
needsTimeExtensionSubTab()
const TAB_ID_MANUAL_SCORING
checkScoreParticipantsTabAccess()
const CMD_SHOW_GENERAL_CONFIG_FORM
getBrowseForQuestionsTab()
const SETTINGS_SUBTAB_ID_ASSIGN_SKILLS_TO_QUESTIONS
getParticipantsTabTarget()
const SETTINGS_SUBTAB_ID_SCORING
const SUBTAB_ID_LO_RESULTS
isPermissionsAccessGranted()
const SUBTAB_ID_MY_SOLUTIONS
const SETTINGS_SUBTAB_ID_PERSONAL_DEFAULT_SETTINGS
setParentBackHref(?string $parent_back_href)
const SETTINGS_SUBTAB_ID_GENERAL
const CMD_SHOW_SKILL_QUEST_ASSIGNS
const CMD_SHOW_SKILL_QUEST_ASSIGN_PROPERTIES_FORM
const QUESTIONS_SUBTAB_ID_RANDOM_POOLS