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()
208 || $this->test_access->checkScoreParticipantsAccessAnon();
220 if (preg_match(
'/^ass(.*?)gui$/i', $this->
ctrl->getNextClass($this))) {
224 if ($this->
ctrl->getNextClass($this) ==
'ilassquestionpagegui') {
228 if ($this->
ctrl->getCmdClass() ==
'iltestoutputgui') {
232 if ($this->
ctrl->getCmdClass() ==
'iltestevaluationgui') {
233 return in_array($this->
ctrl->getCmd(), [
234 '',
'outUserResultsPassOverview',
'outUserListOfAnswerPasses',
'singleResults' 247 $class_path = $this->
ctrl->getCurrentClassPath();
249 switch (array_pop($class_path)) {
250 case MarkSchemaGUI::class:
251 case SettingsMainGUI::class:
252 case SettingsScoringGUI::class:
261 switch ($this->
ctrl->getCmd()) {
266 case 'directfeedback':
268 case 'outCorrectSolution':
269 case 'showAnswersOfUser':
270 case 'backFromSummary':
274 case 'confirmFinish':
275 case 'outTestSummary':
276 case 'outQuestionSummary':
278 case 'selectImagemapRegion':
279 case 'confirmSubmitAnswers':
280 case 'finalSubmission':
282 case 'outUserPassDetails':
283 case 'checkPassword':
284 case 'exportCertificate':
285 case 'finishListOfAnswers':
286 case 'backConfirmFinish':
287 case 'showFinalStatement':
289 case 'browseForQuestions':
292 case 'resetTextFilter':
293 case 'insertQuestions':
295 'iltestdashboardgui',
297 'illearningprogressgui' 299 if (!in_array($this->
ctrl->getNextClass($this), $classes)) {
305 case 'certificateservice':
306 case 'certificateImport':
307 case 'certificateUpload':
308 case 'certificateEditor':
309 case 'certificateDelete':
310 case 'certificateSave':
312 case 'deleteDefaults':
314 case 'applyDefaults':
315 case 'inviteParticipants':
316 case 'searchParticipants':
317 if ($this->
isWriteAccessGranted() && in_array(strtolower($this->
ctrl->getCmdClass()), [
'ilobjtestgui',
'ilcertificategui'])) {
330 $this->
lng->txt(
'test'),
331 $this->
ctrl->getLinkTargetByClass(
333 \ilObjTestGUI::class, TestScreenGUI::class],
341 && !$this->test_object->getMainSettings()->getAdditionalSettings()->getHideInfoTab()) {
342 $this->
tabs->addTarget(
344 $this->
ctrl->getLinkTargetByClass(
346 \ilRepositoryGUI::class,
347 \ilObjTestGUI::class,
348 \ilInfoScreenGUI::class
351 [
'',
'outIntroductionPage',
'setAnonymousId',
'redirectToInfoScreen']
357 $settingsCommands = [
358 'marks',
'showMarkSchema',
'addMarkStep',
'deleteMarkSteps',
359 'resetToSimpleMarkSchema',
'saveMarks',
'certificate',
360 'certificateEditor',
'certificateSave',
361 'certificatePreview',
'certificateDelete',
'certificateUpload',
'certificateImport',
362 'scoring',
'defaults',
'addDefaults',
'deleteDefaults',
'applyDefaults',
363 'inviteParticipants',
'saveFixedParticipantsStatus',
'searchParticipants',
'addParticipants' 366 $reflection = new \ReflectionClass(SettingsMainGUI::class);
367 foreach ($reflection->getConstants() as $name => $value) {
368 if (substr($name, 0, 4) ===
'CMD_') {
369 $settingsCommands[] = $value;
373 $reflection = new \ReflectionClass(SettingsScoringGUI::class);
374 foreach ($reflection->getConstants() as $name => $value) {
375 if (substr($name, 0, 4) ===
'CMD_') {
376 $settingsCommands[] = $value;
380 $settingsCommands[] =
'';
382 $this->
tabs->addTarget(
384 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, SettingsMainGUI::class]),
388 'ilobjtestsettingsmaingui',
389 'ilobjtestsettingsscoringresultsgui',
396 if ($this->test_object->isFixedTest()) {
397 $target = $this->
ctrl->getLinkTargetByClass(
398 \ilObjTestGUI::class,
403 if ($this->test_object->isRandomTest()) {
404 $target = $this->
ctrl->getLinkTargetByClass(\ilTestRandomQuestionSetConfigGUI::class);
408 $this->
tabs->addTarget(
412 'showQuestions',
'browseForQuestions',
'questionBrowser',
'createQuestion',
413 'filter',
'resetFilter',
'insertQuestions',
'back',
414 'executeCreateQuestion',
'cancelCreateQuestion',
415 'addQuestionpool',
'saveRandomQuestions',
'saveQuestionSelectionMode',
'print',
416 'addsource',
'removesource',
'randomQuestions' 423 self::TAB_ID_PARTICIPANTS,
424 $this->
lng->txt(
'participants'),
431 self::TAB_ID_YOUR_RESULTS,
432 $this->
lng->txt(
'your_results'),
438 if ($this->test_object->getGlobalSettings()->isManualScoringEnabled()) {
440 $this->
tabs->addTarget(
441 self::TAB_ID_MANUAL_SCORING,
442 $this->
ctrl->getLinkTargetByClass(
443 [\ilObjTestGUI::class, TestScoringByQuestionGUI::class],
444 'showManScoringByQuestionParticipantsTable' 447 'showManScoringParticipantsTable',
448 'applyManScoringParticipantsFilter',
449 'resetManScoringParticipantsFilter',
450 'showManScoringParticipantScreen',
451 'showManScoringByQuestionParticipantsTable',
452 'applyManScoringByQuestionFilter',
453 'resetManScoringByQuestionFilter',
454 'saveManScoringByQuestion' 462 $this->
tabs->addTarget(
463 self::TAB_ID_HISTORY,
464 $this->
ctrl->getLinkTargetByClass(\ilObjTestGUI::class,
'history'),
471 $this->
tabs->addTarget(
472 self::TAB_ID_LEARNING_PROGRESS,
473 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilLearningProgressGUI::class],
''),
476 'illplistofobjectsgui',
477 'illplistofsettingsgui',
478 'illearningprogressgui',
479 'illplistofprogressgui' 485 $mdgui = new \ilObjectMetaDataGUI($this->test_object);
486 $mdtab = $mdgui->getTab(\ilObjTestGUI::class);
488 $this->
tabs->addTarget(
489 self::TAB_ID_META_DATA,
496 $this->
tabs->addTarget(
498 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilTestExportGUI::class],
''),
505 $this->
tabs->addTarget(
506 self::TAB_ID_PERMISSIONS,
507 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilPermissionGUI::class],
'perm'),
508 [
'perm',
'info',
'owner'],
517 $this->
ctrl->saveParameterByClass($this->
ctrl->getCmdClass(),
'q_id');
519 $this->
tabs->setBackTarget(
520 $this->
lng->txt(
'backtocallingtest'),
523 $this->
tabs->addTarget(
524 'tst_browse_for_questions',
525 $this->
ctrl->getLinkTargetByClass(\ilObjTestGUI::class,
'browseForQuestions'),
526 [
'browseForQuestions',
'filter',
'resetFilter',
'resetTextFilter',
'insertQuestions'],
538 $this->
tabs->setBackTarget(
539 $this->
lng->txt(
'backtocallingtest'),
542 $this->
tabs->addTarget(
544 $this->
ctrl->getLinkTargetByClass(\ilObjTestGUI::class,
'randomQuestions'),
558 $this->
tabs->activateTab(self::TAB_ID_QUESTIONS);
560 if ($this->test_object->isRandomTest()) {
561 $this->
tabs->addSubTabTarget(
562 self::QUESTIONS_SUBTAB_ID_RANDOM_SETTINGS,
563 $this->
ctrl->getLinkTargetByClass(
564 \ilTestRandomQuestionSetConfigGUI::class,
567 [
'',
'showGeneralConfigForm',
'saveGeneralConfigForm']
570 $this->
tabs->addSubTabTarget(
571 self::QUESTIONS_SUBTAB_ID_RANDOM_POOLS,
572 $this->
ctrl->getLinkTargetByClass(
573 \ilTestRandomQuestionSetConfigGUI::class,
576 [
'showSourcePoolDefinitionList']
580 $this->
tabs->addSubTab(
581 self::SUBTAB_ID_QST_LIST_VIEW,
582 $this->
lng->txt(
'edit_test_questions'),
586 if ($this->test_object->isSkillServiceToBeConsidered()) {
587 $this->
tabs->addSubTabTarget(
588 self::SETTINGS_SUBTAB_ID_ASSIGN_SKILLS_TO_QUESTIONS,
589 $this->
ctrl->getLinkTargetByClass(
591 \ilTestSkillAdministrationGUI::class,
592 \ilAssQuestionSkillAssignmentsGUI::class
606 $this->
tabs->addSubTabTarget(
607 self::SETTINGS_SUBTAB_ID_GENERAL,
608 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, SettingsMainGUI::class]),
610 [SettingsMainGUI::class]
613 $this->
tabs->addSubTabTarget(
614 self::SETTINGS_SUBTAB_ID_MARK_SCHEMA,
615 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, MarkSchemaGUI::class],
'showMarkSchema'),
617 [MarkSchemaGUI::class]
620 $this->
tabs->addSubTabTarget(
621 self::SETTINGS_SUBTAB_ID_SCORING,
622 $this->
ctrl->getLinkTargetByClass(
623 [\ilObjTestGUI::class, SettingsScoringGUI::class],
627 [SettingsScoringGUI::class]
630 $this->
ctrl->setParameterByClass(\ilTestPageGUI::class,
'page_type',
'introductionpage');
631 $this->
tabs->addSubTabTarget(
632 self::SETTINGS_SUBTAB_ID_EDIT_INTRODUCTION_PAGE,
633 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilTestPageGUI::class],
'preview'),
637 $this->
ctrl->setParameterByClass(\ilTestPageGUI::class,
'page_type',
'concludingremarkspage');
638 $this->
tabs->addSubTabTarget(
639 self::SETTINGS_SUBTAB_ID_EDIT_CONCLUSION_PAGE,
640 $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilTestPageGUI::class],
'preview'),
643 $this->
ctrl->clearParameterByClass(\ilTestPageGUI::class,
'page_type');
645 $validator = new \ilCertificateActiveValidator();
646 if ($validator->validate() ===
true) {
647 $this->
tabs->addSubTabTarget(
648 self::SETTINGS_SUBTAB_ID_CERTIFICATE,
649 $this->
ctrl->getLinkTargetByClass(\ilObjTestGUI::class,
'certificate'),
650 [
'certificate',
'certificateEditor',
'certificateRemoveBackground',
'ceateSave',
651 'certificatePreview',
'certificateDelete',
'certificateUpload',
'certificateImport'],
652 [
'',
'ilobjtestgui',
'ilcertificategui']
656 if ($this->test_object->isSkillServiceToBeConsidered()) {
657 $this->
tabs->addSubTabTarget(
658 self::SETTINGS_SUBTAB_ID_ASSIGN_SKILL_TRESHOLDS,
659 $this->
ctrl->getLinkTargetByClass(
661 \ilTestSkillAdministrationGUI::class,
662 \ilTestSkillLevelThresholdsGUI::class
670 $this->
tabs->addSubTabTarget(
671 self::SETTINGS_SUBTAB_ID_PERSONAL_DEFAULT_SETTINGS,
672 $this->
ctrl->getLinkTargetByClass(\ilObjTestGUI::class,
'defaults'),
673 [
'defaults',
'deleteDefaults',
'addDefaults',
'applyDefaults'],
674 [
'',
'ilobjtestgui',
'ilcertificategui']
677 $lti_settings = new \ilLTIProviderObjectSettingGUI($this->test_object->getRefId());
678 if ($lti_settings->hasSettingsAccess()) {
679 $this->
tabs->addSubTabTarget(
681 $this->
ctrl->getLinkTargetByClass(\ilLTIProviderObjectSettingGUI::class),
683 [\ilLTIProviderObjectSettingGUI::class]
699 if (!($this->test_object->getProcessingTimeInSeconds() > 0)) {
703 if ($this->test_object->getNrOfTries() != 1) {
712 return $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilTestParticipantsGUI::class]);
717 return $this->test_session->reportableResultsAvailable($this->test_object)
718 || $this->test_session->getActiveId() !== 0
719 && $this->test_object->canShowSolutionPrintview($this->test_session->getUserId());
725 return $this->
ctrl->getLinkTargetByClass([\ilObjTestGUI::class, \ilTestResultsGUI::class, \ilTestEvalObjectiveOrientedGUI::class]);
729 return $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilMyTestSolutionsGUI::class, \ilTestEvaluationGUI::class]);
732 return $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilMyTestResultsGUI::class, \ilTestEvaluationGUI::class]);
737 return $this->test_object->isScoreReportingEnabled();
742 if (!$this->test_object->isScoreReportingEnabled()) {
746 return $this->objective_parent->isObjectiveOrientedPresentationRequired();
751 if (!$this->test_object->isScoreReportingEnabled()) {
755 return $this->test_object->getHighscoreEnabled();
760 if (!$this->test_object->isScoreReportingEnabled()) {
764 return $this->test_object->isSkillServiceToBeConsidered();
769 return $this->test_object->canShowSolutionPrintview($this->test_session->getUserId());
775 $this->
tabs->addSubTab(
776 self::SUBTAB_ID_LO_RESULTS,
777 $this->
lng->txt(
'tst_tab_results_objective_oriented'),
778 $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilTestEvalObjectiveOrientedGUI::class])
783 $myResultsLabel = $this->
lng->txt(
'tst_show_results');
786 $myResultsLabel = $this->
lng->txt(
'tst_tab_results_pass_oriented');
789 $this->
tabs->addSubTab(
790 self::SUBTAB_ID_MY_RESULTS,
792 $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilMyTestResultsGUI::class, \ilTestEvaluationGUI::class])
797 $this->
tabs->addSubTab(
798 self::SUBTAB_ID_SKILL_RESULTS,
799 $this->
lng->txt(
'tst_show_comp_results'),
800 $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilTestSkillEvaluationGUI::class])
805 $this->
tabs->addSubTab(
806 self::SUBTAB_ID_HIGHSCORE,
807 $this->
lng->txt(
'tst_show_toplist'),
808 $this->
ctrl->getLinkTargetByClass([\ilTestResultsGUI::class, \ilTestToplistGUI::class],
'outResultsToplist')
813 $this->
tabs->addSubTab(
814 self::SUBTAB_ID_MY_SOLUTIONS,
815 $this->
lng->txt(
'tst_list_of_answers_show'),
816 $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)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
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