19 declare(strict_types=1);
116 case self::TAB_ID_EXAM_DASHBOARD:
117 case self::TAB_ID_RESULTS:
118 case self::TAB_ID_SETTINGS:
120 $this->
tabs->activateTab($tabId);
130 case self::SUBTAB_ID_FIXED_PARTICIPANTS:
131 case self::SUBTAB_ID_TIME_EXTENSION:
133 case self::SUBTAB_ID_PARTICIPANTS_RESULTS:
134 case self::SUBTAB_ID_MY_RESULTS:
135 case self::SUBTAB_ID_LO_RESULTS:
136 case self::SUBTAB_ID_HIGHSCORE:
137 case self::SUBTAB_ID_SKILL_RESULTS:
138 case self::SUBTAB_ID_MY_SOLUTIONS:
140 case self::SUBTAB_ID_QST_LIST_VIEW:
141 case self::SUBTAB_ID_QST_PAGE_VIEW:
143 case self::SETTINGS_SUBTAB_ID_GENERAL:
144 case self::SETTINGS_SUBTAB_ID_MARK_SCHEMA:
145 case self::SETTINGS_SUBTAB_ID_SCORING:
146 case self::SETTINGS_SUBTAB_ID_EDIT_INTRODUCTION_PAGE:
147 case self::SETTINGS_SUBTAB_ID_EDIT_CONCLUSION_PAGE:
148 case self::SETTINGS_SUBTAB_ID_CERTIFICATE:
149 case self::SETTINGS_SUBTAB_ID_PERSONAL_DEFAULT_SETTINGS:
151 $this->
tabs->activateSubTab($subTabId);
256 return $this->
access->checkAccess(
'read',
'', $this->
getTestOBJ()->getRefId());
264 return $this->
access->checkAccess(
'write',
'', $this->
getTestOBJ()->getRefId());
272 return $this->
access->checkAccess(
'tst_statistics',
'', $this->
getTestOBJ()->getRefId());
280 return $this->
access->checkAccess(
'edit_permission',
'', $this->
getTestOBJ()->getRefId());
296 if ($this->test_access->checkManageParticipantsAccess()) {
308 return $this->test_access->checkScoreParticipantsAccess();
316 return $this->test_access->checkStatisticsAccess();
330 if (preg_match(
'/^ass(.*?)gui$/i', $this->
ctrl->getNextClass($this))) {
334 if ($this->
ctrl->getNextClass($this) ==
'ilassquestionpagegui') {
338 if ($this->
ctrl->getCmdClass() ==
'iltestoutputgui') {
342 if ($this->
ctrl->getCmdClass() ==
'iltestevaluationgui') {
343 return in_array($this->
ctrl->getCmd(), [
344 '',
'outUserResultsPassOverview',
'outUserListOfAnswerPasses',
'outEvaluation',
'eval_a',
'singleResults',
'detailedEvaluation' 357 switch (strtolower($this->
ctrl->getCmdClass())) {
358 case 'ilmarkschemagui':
359 case 'ilobjtestsettingsmaingui':
360 case 'ilobjtestsettingsscoringresultsgui':
369 switch ($this->
ctrl->getCmd()) {
374 case 'directfeedback':
376 case 'outCorrectSolution':
378 case 'showAnswersOfUser':
379 case 'backFromSummary':
383 case 'confirmFinish':
384 case 'outTestSummary':
385 case 'outQuestionSummary':
387 case 'selectImagemapRegion':
388 case 'confirmSubmitAnswers':
389 case 'finalSubmission':
391 case 'outUserPassDetails':
392 case 'checkPassword':
393 case 'exportCertificate':
394 case 'finishListOfAnswers':
395 case 'backConfirmFinish':
396 case 'showFinalStatement':
398 case 'browseForQuestions':
401 case 'resetTextFilter':
402 case 'insertQuestions':
404 'iltestdashboardgui',
406 'illearningprogressgui' 408 if (!in_array($this->
ctrl->getNextClass($this), $classes)) {
414 case 'certificateservice':
415 case 'certificateImport':
416 case 'certificateUpload':
417 case 'certificateEditor':
418 case 'certificateDelete':
419 case 'certificateSave':
421 case 'deleteDefaults':
423 case 'applyDefaults':
424 case 'inviteParticipants':
425 case 'searchParticipants':
426 if ($this->
isWriteAccessGranted() && in_array(strtolower($this->
ctrl->getCmdClass()), [
'ilobjtestgui',
'ilcertificategui'])) {
435 case 'detailedEvaluation':
436 case 'outEvaluation':
437 case 'singleResults':
438 case 'exportEvaluation':
439 case 'evalUserDetail':
440 case 'outStatisticsResultsOverview':
441 case 'statisticsPassDetails':
442 case 'exportCertificateArchive':
451 $this->
lng->txt(
'test'),
458 $up = $this->wrapper->has(
'up')
459 && $this->wrapper->retrieve(
'up', $this->
refinery->string()) !==
'';
460 $down = $this->wrapper->has(
'down')
461 && $this->wrapper->retrieve(
'down', $this->
refinery->string()) !==
'';
462 $browse = $this->wrapper->has(
'browse')
463 && $this->wrapper->retrieve(
'browse', $this->
refinery->int()) === 1;
465 $force_active = ($up || $down || $browse) ?
true :
false;
468 $target = $this->
ctrl->getLinkTargetByClass(
475 $target = $this->
ctrl->getLinkTargetByClass(
'ilTestRandomQuestionSetConfigGUI');
478 $this->
tabs->addTarget(
482 'questions',
'browseForQuestions',
'questionBrowser',
'createQuestion',
483 'filter',
'resetFilter',
'insertQuestions',
484 'back',
'removeQuestions',
'moveQuestions',
485 'insertQuestionsBefore',
'insertQuestionsAfter',
'confirmRemoveQuestions',
486 'cancelRemoveQuestions',
'executeCreateQuestion',
'cancelCreateQuestion',
487 'addQuestionpool',
'saveRandomQuestions',
'saveQuestionSelectionMode',
'print',
488 'addsource',
'removesource',
'randomQuestions' 498 $this->
tabs->addTarget(
500 $this->
ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'infoScreen'),
501 [
'infoScreen',
'outIntroductionPage',
'showSummary',
502 'setAnonymousId',
'redirectToInfoScreen']
508 $settingsCommands = [
509 'marks',
'showMarkSchema',
'addMarkStep',
'deleteMarkSteps',
510 'resetToSimpleMarkSchema',
'saveMarks',
'certificate',
511 'certificateEditor',
'certificateRemoveBackground',
'certificateSave',
512 'certificatePreview',
'certificateDelete',
'certificateUpload',
'certificateImport',
513 'scoring',
'defaults',
'addDefaults',
'deleteDefaults',
'applyDefaults',
514 'inviteParticipants',
'saveFixedParticipantsStatus',
'searchParticipants',
'addParticipants' 518 foreach ($reflection->getConstants() as $name => $value) {
519 if (substr($name, 0, 4) ===
'CMD_') {
520 $settingsCommands[] = $value;
524 $reflection =
new ReflectionClass(
'ilObjTestSettingsScoringResultsGUI');
525 foreach ($reflection->getConstants() as $name => $value) {
526 if (substr($name, 0, 4) ===
'CMD_') {
527 $settingsCommands[] = $value;
531 $settingsCommands[] =
'';
533 $this->
tabs->addTarget(
535 $this->
ctrl->getLinkTargetByClass(
'ilObjTestSettingsMainGUI'),
539 'ilobjtestsettingsmaingui',
540 'ilobjtestsettingsscoringresultsgui',
547 if ($this->
getTestOBJ()->isSkillServiceToBeConsidered()) {
548 $link = $this->
ctrl->getLinkTargetByClass(
549 [
'ilTestSkillAdministrationGUI',
'ilAssQuestionSkillAssignmentsGUI'],
553 $this->
tabs->addTarget(
'tst_tab_competences', $link, [], []);
559 self::TAB_ID_EXAM_DASHBOARD,
560 $this->
lng->txt(
'dashboard_tab'),
567 self::TAB_ID_RESULTS,
568 $this->
lng->txt(
'results_tab'),
574 $this->
tabs->addTarget(
575 self::TAB_ID_LEARNING_PROGRESS,
576 $this->
ctrl->getLinkTargetByClass([
'illearningprogressgui'],
''),
579 'illplistofobjectsgui',
580 'illplistofsettingsgui',
581 'illearningprogressgui',
582 'illplistofprogressgui' 589 if (count($scoring)) {
591 $this->
tabs->addTarget(
592 self::TAB_ID_MANUAL_SCORING,
593 $this->
ctrl->getLinkTargetByClass(
594 'ilTestScoringByQuestionsGUI',
595 'showManScoringByQuestionParticipantsTable' 598 'showManScoringParticipantsTable',
599 'applyManScoringParticipantsFilter',
600 'resetManScoringParticipantsFilter',
601 'showManScoringParticipantScreen',
602 'showManScoringByQuestionParticipantsTable',
603 'applyManScoringByQuestionFilter',
604 'resetManScoringByQuestionFilter',
605 'saveManScoringByQuestion' 614 $scoring_adjust_active = (bool) $setting->get(
'assessment_adjustments_enabled',
'0');
617 self::TAB_ID_CORRECTION,
618 $this->
lng->txt(self::TAB_ID_CORRECTION),
619 $this->
ctrl->getLinkTargetByClass(
'ilTestCorrectionsGUI')
625 $this->
tabs->addTarget(
626 self::TAB_ID_STATISTICS,
627 $this->
ctrl->getLinkTargetByClass(
628 [ilRepositoryGUI::class, ilObjTestGUI::class, ilTestEvaluationGUI::class],
635 'detailedEvaluation',
639 'outStatisticsResultsOverview',
640 'statisticsPassDetails',
648 $this->
tabs->addTarget(
649 self::TAB_ID_HISTORY,
650 $this->
ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'history'),
656 $mdtab = $mdgui->getTab();
658 $this->
tabs->addTarget(
659 self::TAB_ID_META_DATA,
666 $this->
tabs->addTarget(
668 $this->
ctrl->getLinkTargetByClass(
'iltestexportgui',
''),
675 $this->
tabs->addTarget(
676 self::TAB_ID_PERMISSIONS,
677 $this->
ctrl->getLinkTargetByClass([
'ilObjTestGUI',
'ilpermissiongui'],
'perm'),
678 [
'perm',
'info',
'owner'],
686 foreach ($hideTabs as $tabId) {
687 $this->
tabs->removeTab($tabId);
695 $this->
ctrl->saveParameterByClass($this->
ctrl->getCmdClass(),
'q_id');
697 $this->
tabs->setBackTarget(
698 $this->
lng->txt(
'backtocallingtest'),
699 $this->
ctrl->getLinkTargetByClass($this->
ctrl->getCmdClass(),
'questions')
701 $this->
tabs->addTarget(
702 'tst_browse_for_questions',
703 $this->
ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'browseForQuestions'),
704 [
'browseForQuestions',
'filter',
'resetFilter',
'resetTextFilter',
'insertQuestions'],
716 $this->
tabs->setBackTarget($this->
lng->txt(
'backtocallingtest'), $this->
ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'questions'));
717 $this->
tabs->addTarget(
719 $this->
ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'randomQuestions'),
729 $this->
tabs->activateTab(self::TAB_ID_QUESTIONS);
731 $this->
tabs->addSubTab(
732 self::SUBTAB_ID_QST_LIST_VIEW,
733 $this->
lng->txt(
'edit_test_questions'),
734 $this->
ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'questions')
739 $this->
tabs->addSubTabTarget(
741 $this->
ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'print'),
745 $this->
ctrl->getCmd() ==
'print' 747 $this->
tabs->addSubTabTarget(
749 $this->
ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'review'),
753 $this->
ctrl->getCmd() ==
'review' 760 $this->
tabs->addSubTabTarget(
762 $this->
ctrl->getLinkTargetByClass(
'iltestevaluationgui',
'outEvaluation'),
763 [
'outEvaluation',
'detailedEvaluation',
'exportEvaluation',
'evalUserDetail',
'passDetails',
764 'outStatisticsResultsOverview',
'statisticsPassDetails',
'exportCertificateArchive'],
769 $this->
tabs->addSubTabTarget(
770 'tst_results_aggregated',
771 $this->
ctrl->getLinkTargetByClass(
'iltestevaluationgui',
'eval_a'),
778 $this->
tabs->addSubTabTarget(
779 'tst_single_results',
780 $this->
ctrl->getLinkTargetByClass(
'iltestevaluationgui',
'singleResults'),
789 $this->
tabs->addSubTabTarget(
790 self::SETTINGS_SUBTAB_ID_GENERAL,
791 $this->
ctrl->getLinkTargetByClass(
'ilObjTestSettingsMainGUI'),
793 [
'ilobjtestsettingsmaingui']
796 $this->
tabs->addSubTabTarget(
797 self::SETTINGS_SUBTAB_ID_MARK_SCHEMA,
798 $this->
ctrl->getLinkTargetByClass(
'ilmarkschemagui',
'showMarkSchema'),
803 $this->
tabs->addSubTabTarget(
804 self::SETTINGS_SUBTAB_ID_SCORING,
805 $this->
ctrl->getLinkTargetByClass(
'ilObjTestSettingsScoringResultsGUI'),
807 [
'ilobjtestsettingsscoringresultsgui']
810 $this->
ctrl->setParameterByClass(ilTestPageGUI::class,
'page_type',
'introductionpage');
811 $this->
tabs->addSubTabTarget(
812 self::SETTINGS_SUBTAB_ID_EDIT_INTRODUCTION_PAGE,
813 $this->
ctrl->getLinkTargetByClass(ilTestPageGUI::class,
'preview'),
817 $this->
ctrl->setParameterByClass(ilTestPageGUI::class,
'page_type',
'concludingremarkspage');
818 $this->
tabs->addSubTabTarget(
819 self::SETTINGS_SUBTAB_ID_EDIT_CONCLUSION_PAGE,
820 $this->
ctrl->getLinkTargetByClass(ilTestPageGUI::class,
'preview'),
823 $this->
ctrl->clearParameterByClass(ilTestPageGUI::class,
'page_type');
826 if ($validator->validate() ===
true) {
827 $this->
tabs->addSubTabTarget(
828 self::SETTINGS_SUBTAB_ID_CERTIFICATE,
829 $this->
ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'certificate'),
830 [
'certificate',
'certificateEditor',
'certificateRemoveBackground',
'ceateSave',
831 'certificatePreview',
'certificateDelete',
'certificateUpload',
'certificateImport'],
832 [
'',
'ilobjtestgui',
'ilcertificategui']
836 $this->
tabs->addSubTabTarget(
837 self::SETTINGS_SUBTAB_ID_PERSONAL_DEFAULT_SETTINGS,
838 $this->
ctrl->getLinkTargetByClass(
'ilObjTestGUI',
'defaults'),
839 [
'defaults',
'deleteDefaults',
'addDefaults',
'applyDefaults'],
840 [
'',
'ilobjtestgui',
'ilcertificategui']
844 if ($lti_settings->hasSettingsAccess()) {
845 $this->
tabs->addSubTabTarget(
847 $this->
ctrl->getLinkTargetByClass(ilLTIProviderObjectSettingGUI::class),
849 [ilLTIProviderObjectSettingGUI::class]
871 if (!($this->
getTestOBJ()->getProcessingTimeInSeconds() > 0)) {
875 if ($this->
getTestOBJ()->getNrOfTries() != 1) {
891 return $this->
ctrl->getLinkTargetByClass([
'ilTestDashboardGUI',
'ilTestParticipantsGUI']);
896 if (!$this->test_access->checkManageParticipantsAccess()) {
900 $this->
tabs->addSubTab(
901 self::SUBTAB_ID_FIXED_PARTICIPANTS,
903 $this->
ctrl->getLinkTargetByClass(
'ilTestParticipantsGUI')
907 $this->
tabs->addSubTab(
908 self::SUBTAB_ID_TIME_EXTENSION,
909 $this->
lng->txt(
'timing'),
910 $this->
ctrl->getLinkTargetByClass(
'ilTestParticipantsTimeExtensionGUI')
917 if ($this->
getTestOBJ()->getFixedParticipants()) {
918 return $this->
lng->txt(
'fixedparticipants_subtab');
921 return $this->
lng->txt(
'autoparticipants_subtab');
938 return $this->
ctrl->getLinkTargetByClass([
'ilTestResultsGUI',
'ilParticipantsTestResultsGUI']);
942 return $this->
ctrl->getLinkTargetByClass([
'ilTestResultsGUI',
'ilTestEvalObjectiveOrientedGUI']);
946 return $this->
ctrl->getLinkTargetByClass([
'ilTestResultsGUI',
'ilMyTestResultsGUI',
'ilTestEvaluationGUI']);
950 return $this->
ctrl->getLinkTargetByClass([
'ilTestResultsGUI',
'ilMyTestSolutionsGUI',
'ilTestEvaluationGUI']);
953 return $this->
ctrl->getLinkTargetByClass(
'ilTestResultsGUI');
973 return $this->objective_parent->isObjectiveOrientedPresentationRequired();
981 if ($this->test_access->checkParticipantsResultsAccess()) {
997 return $this->
getTestOBJ()->getHighscoreEnabled();
1009 return $this->
getTestOBJ()->isSkillServiceToBeConsidered();
1020 $this->
tabs->addSubTab(
1021 self::SUBTAB_ID_PARTICIPANTS_RESULTS,
1022 $this->
lng->txt(
'participants_results_subtab'),
1023 $this->
ctrl->getLinkTargetByClass([
'ilTestResultsGUI',
'ilParticipantsTestResultsGUI'])
1028 $this->
tabs->addSubTab(
1029 self::SUBTAB_ID_LO_RESULTS,
1030 $this->
lng->txt(
'tst_tab_results_objective_oriented'),
1031 $this->
ctrl->getLinkTargetByClass([
'ilTestResultsGUI',
'ilTestEvalObjectiveOrientedGUI'])
1036 $myResultsLabel = $this->
lng->txt(
'tst_show_results');
1039 $myResultsLabel = $this->
lng->txt(
'tst_tab_results_pass_oriented');
1042 $this->
tabs->addSubTab(
1043 self::SUBTAB_ID_MY_RESULTS,
1045 $this->
ctrl->getLinkTargetByClass([
'ilTestResultsGUI',
'ilMyTestResultsGUI',
'ilTestEvaluationGUI'])
1050 $this->
tabs->addSubTab(
1051 self::SUBTAB_ID_SKILL_RESULTS,
1052 $this->
lng->txt(
'tst_show_comp_results'),
1053 $this->
ctrl->getLinkTargetByClass([
'ilTestResultsGUI',
'ilTestSkillEvaluationGUI'])
1058 $this->
tabs->addSubTab(
1059 self::SUBTAB_ID_HIGHSCORE,
1060 $this->
lng->txt(
'tst_show_toplist'),
1061 $this->
ctrl->getLinkTargetByClass([
'ilTestResultsGUI',
'ilTestToplistGUI'],
'outResultsToplist')
1066 $this->
tabs->addSubTab(
1067 self::SUBTAB_ID_MY_SOLUTIONS,
1068 $this->
lng->txt(
'tst_list_of_answers_show'),
1069 $this->
ctrl->getLinkTargetByClass([
'ilTestResultsGUI',
'ilMyTestSolutionsGUI',
'ilTestEvaluationGUI'])
setTestOBJ(ilObjTest $test_object)
isStatisticsAccessGranted()
const SETTINGS_SUBTAB_ID_EDIT_CONCLUSION_PAGE
const SETTINGS_SUBTAB_ID_PERSONAL_DEFAULT_SETTINGS
const SUBTAB_ID_FIXED_PARTICIPANTS
const SETTINGS_SUBTAB_ID_CERTIFICATE
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
needsParticipantsResultsSubTab()
isTabsConfigSetupRequired()
const TAB_ID_QUESTIONS
(Sub-)Tab ID constants
const TAB_ID_EXAM_DASHBOARD
const SETTINGS_SUBTAB_ID_MARK_SCHEMA
const TAB_ID_MANUAL_SCORING
const SETTINGS_SUBTAB_ID_SCORING
static checkAccess(int $a_ref_id, bool $a_allow_only_read=true)
check access to learning progress
activateSubTab($subTabId)
$test_question_set_config
const SUBTAB_ID_PARTICIPANTS_RESULTS
isPermissionsAccessGranted()
getDashbardParticipantsSubTabLabel()
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const SETTINGS_SUBTAB_ID_GENERAL
checkStatisticsTabAccess()
Interface RequestWrapper.
getBrowseForQuestionsTab()
const SUBTAB_ID_GENERAL_SETTINGS
const SUBTAB_ID_MY_RESULTS
checkDashboardTabAccess()
setParentBackLabel($parent_back_label)
const TAB_ID_LEARNING_PROGRESS
const SUBTAB_ID_HIGHSCORE
setParentBackHref($parent_back_href)
__construct(private ilTabsGUI $tabs, private ilLanguage $lng, private ilCtrl $ctrl, private RequestWrapper $wrapper, private Refinery $refinery, private ilAccess $access, private ilTestAccess $test_access, private ilTestObjectiveOrientedContainer $objective_parent)
const SUBTAB_ID_SKILL_RESULTS
needsTimeExtensionSubTab()
const SUBTAB_ID_MY_SOLUTIONS
needsSkillResultsSubTab()
static _getManualScoring()
Retrieve the manual scoring settings.
const SUBTAB_ID_TIME_EXTENSION
const SUBTAB_ID_LO_RESULTS
checkScoreParticipantsTabAccess()
const SETTINGS_SUBTAB_ID_EDIT_INTRODUCTION_PAGE
setTestQuestionSetConfig(ilTestQuestionSetConfig $test_question_set_config)
const SUBTAB_ID_QST_PAGE_VIEW
const CMD_SHOW_SKILL_QUEST_ASSIGNS
getTestQuestionSetConfig()
setTestSession($test_session)
const SUBTAB_ID_QST_LIST_VIEW
Refinery Factory $refinery