ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilTestTabsManager.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
11{
16 const TAB_ID_QUESTIONS = 'assQuestions';
17 const SUBTAB_ID_QST_LIST_VIEW = 'qst_list_view';
18 const SUBTAB_ID_QST_PAGE_VIEW = 'qst_page_view';
19
20 const TAB_ID_INFOSCREEN = 'info_short';
21 const TAB_ID_SETTINGS = 'settings';
22 const TAB_ID_LEARNING_PROGRESS = 'learning_progress';
23 const TAB_ID_MANUAL_SCORING = 'manscoring';
24 const TAB_ID_CORRECTION = 'scoringadjust';
25 const TAB_ID_STATISTICS = 'statistics';
26 const TAB_ID_HISTORY = 'history';
27 const TAB_ID_META_DATA = 'meta_data';
28 const TAB_ID_EXPORT = 'export';
29 const TAB_ID_PERMISSIONS = 'perm_settings';
30
31 const TAB_ID_EXAM_DASHBOARD = 'dashboard_tab';
32 const SUBTAB_ID_FIXED_PARTICIPANTS = 'fixedparticipants';
33 const SUBTAB_ID_TIME_EXTENSION = 'timeextension';
34
35 const TAB_ID_RESULTS = 'results';
36 const SUBTAB_ID_PARTICIPANTS_RESULTS = 'participantsresults';
37 const SUBTAB_ID_MY_RESULTS = 'myresults';
38 const SUBTAB_ID_LO_RESULTS = 'loresults';
39 const SUBTAB_ID_HIGHSCORE = 'highscore';
40 const SUBTAB_ID_SKILL_RESULTS = 'skillresults';
41 const SUBTAB_ID_MY_SOLUTIONS = 'mysolutions';
42
46 protected $tabs;
47
51 protected $access;
52
56 protected $testAccess;
57
62
66 protected $lng;
67
71 protected $testOBJ;
72
76 protected $testSession;
77
82
86 protected $parentBackHref;
87
92
96 protected $hiddenTabs;
97
102 {
103 $this->testAccess = $testAccess;
104 $this->objectiveParent = $objectiveParent;
105
106 global $DIC; /* @var ILIAS\DI\Container $DIC */
107 $this->tabs = $DIC['ilTabs'];
108 $this->access = $DIC['ilAccess'];
109 $this->lng = $DIC['lng'];
110 }
111
115 public function activateTab($tabId)
116 {
117 switch ($tabId) {
120
121 $this->tabs->activateTab($tabId);
122 }
123 }
124
128 public function activateSubTab($subTabId)
129 {
130 switch ($subTabId) {
133
140
143
144 $this->tabs->activateSubTab($subTabId);
145 }
146 }
147
151 public function getTestOBJ()
152 {
153 return $this->testOBJ;
154 }
155
160 {
161 $this->testOBJ = $testOBJ;
162 }
163
167 public function getTestSession()
168 {
169 return $this->testSession;
170 }
171
176 {
177 $this->testSession = $testSession;
178 }
179
183 public function getTestQuestionSetConfig()
184 {
186 }
187
192 {
193 $this->testQuestionSetConfig = $testQuestionSetConfig;
194 }
195
199 public function getHiddenTabs()
200 {
201 return $this->hiddenTabs;
202 }
203
207 public function setHiddenTabs($hiddenTabs)
208 {
209 $this->hiddenTabs = $hiddenTabs;
210 }
211
215 public function resetHiddenTabs()
216 {
217 $this->hiddenTabs = array();
218 }
219
223 public function getParentBackLabel()
224 {
226 }
227
232 {
233 $this->parentBackLabel = $parentBackLabel;
234 }
235
239 public function getParentBackHref()
240 {
242 }
243
248 {
249 $this->parentBackHref = $parentBackHref;
250 }
251
255 public function hasParentBackLink()
256 {
257 if (!is_string($this->getParentBackHref()) || !strlen($this->getParentBackHref())) {
258 return false;
259 }
260
261 if (!is_string($this->getParentBackLabel()) || !strlen($this->getParentBackLabel())) {
262 return false;
263 }
264
265 return true;
266 }
267
270 public function initSettingsTemplate()
271 {
272 $this->resetHiddenTabs();
273
274 if ($this->getTestOBJ()->getTemplate()) {
275 require_once 'Services/Administration/classes/class.ilSettingsTemplate.php';
276
278 $this->getTestOBJ()->getTemplate(),
280 );
281
282 $this->setHiddenTabs($template->getHiddenTabs());
283 }
284 }
285
290 protected function isHiddenTab($tabId)
291 {
292 return in_array($tabId, $this->getHiddenTabs());
293 }
294
298 protected function isReadAccessGranted()
299 {
300 return $this->access->checkAccess('read', '', $this->getTestOBJ()->getRefId());
301 }
302
306 protected function isWriteAccessGranted()
307 {
308 return $this->access->checkAccess('write', '', $this->getTestOBJ()->getRefId());
309 }
310
314 protected function isStatisticsAccessGranted()
315 {
316 return $this->access->checkAccess('tst_statistics', '', $this->getTestOBJ()->getRefId());
317 }
318
322 protected function isPermissionsAccessGranted()
323 {
324 return $this->access->checkAccess('edit_permission', '', $this->getTestOBJ()->getRefId());
325 }
326
330 protected function isLpAccessGranted()
331 {
332 include_once 'Services/Tracking/classes/class.ilLearningProgressAccess.php';
333 return ilLearningProgressAccess::checkAccess($this->getTestOBJ()->getRefId());
334 }
335
339 protected function checkDashboardTabAccess()
340 {
341 if ($this->testAccess->checkManageParticipantsAccess()) {
342 return true;
343 }
344
345 return false;
346 }
347
352 {
353 return $this->testAccess->checkScoreParticipantsAccess();
354 }
355
359 protected function checkStatisticsTabAccess()
360 {
361 return $this->testAccess->checkStatisticsAccess();
362 }
363
366 public function perform()
367 {
368 if ($this->isTabsConfigSetupRequired()) {
369 $this->setupTabsGuiConfig();
370 }
371 }
372
373 protected function isTabsConfigSetupRequired()
374 {
375 global $DIC; /* @var ILIAS\DI\Container $DIC */
376
377 if (preg_match('/^ass(.*?)gui$/i', $DIC->ctrl()->getNextClass($this))) {
378 return false;
379 }
380
381 if ($DIC->ctrl()->getNextClass($this) == 'ilassquestionpagegui') {
382 return false;
383 }
384
385 if ($DIC->ctrl()->getCmdClass() == 'iltestoutputgui') {
386 return false;
387 }
388
389 if ($DIC->ctrl()->getCmdClass() == 'iltestevaluationgui') {
390 return in_array($DIC->ctrl()->getCmd(), array(
391 '', 'outUserResultsPassOverview', 'outUserListOfAnswerPasses', 'outEvaluation', 'eval_a', 'singleResults', 'detailedEvaluation'
392 ));
393 }
394
395 return true;
396 }
397
398 protected function setupTabsGuiConfig()
399 {
400 global $DIC; /* @var ILIAS\DI\Container $DIC */
401
402 if ($this->hasParentBackLink()) {
403 $this->tabs->setBack2Target($this->getParentBackLabel(), $this->getParentBackHref());
404 }
405
406 switch ($DIC->ctrl()->getCmdClass()) {
407 case 'ilmarkschemagui':
408 case 'ilobjtestsettingsgeneralgui':
409 case 'ilobjtestsettingsscoringresultsgui':
410
411 if ($this->isWriteAccessGranted()) {
412 $this->getSettingsSubTabs();
413 }
414
415 break;
416 }
417
418 switch ($DIC->ctrl()->getCmd()) {
419 case "resume":
420 case "previous":
421 case "next":
422 case "summary":
423 case "directfeedback":
424 case "finishTest":
425 case "outCorrectSolution":
426 case "passDetails":
427 case "showAnswersOfUser":
428 case "backFromSummary":
429 case "show_answers":
430 case "setsolved":
431 case "resetsolved":
432 case "confirmFinish":
433 case "outTestSummary":
434 case "outQuestionSummary":
435 case "gotoQuestion":
436 case "selectImagemapRegion":
437 case "confirmSubmitAnswers":
438 case "finalSubmission":
439 case "postpone":
440 case "outUserPassDetails":
441 case "checkPassword":
442 case "exportCertificate":
443 case "finishListOfAnswers":
444 case "backConfirmFinish":
445 case "showFinalStatement":
446 return;
447 break;
448 case "browseForQuestions":
449 case "filter":
450 case "resetFilter":
451 case "resetTextFilter":
452 case "insertQuestions":
453 $classes = array(
454 'iltestdashboardgui',
455 'iltestresultsgui',
456 "illearningprogressgui" // #8497: resetfilter is also used in lp
457 );
458 if (!in_array($DIC->ctrl()->getNextClass($this), $classes)) {
460 return;
461 }
462 break;
463 case "scoring":
464 case "certificate":
465 case "certificateservice":
466 case "certificateImport":
467 case "certificateUpload":
468 case "certificateEditor":
469 case "certificateDelete":
470 case "certificateSave":
471 case "defaults":
472 case "deleteDefaults":
473 case "addDefaults":
474 case "applyDefaults":
475 case "inviteParticipants":
476 case "searchParticipants":
477 if ($this->isWriteAccessGranted() && in_array($DIC->ctrl()->getCmdClass(), array('ilobjtestgui', 'ilcertificategui'))) {
478 $this->getSettingsSubTabs();
479 }
480 break;
481 case "export":
482 case "print":
483 break;
484 case "statistics":
485 case "eval_a":
486 case "detailedEvaluation":
487 case "outEvaluation":
488 case "singleResults":
489 case "exportEvaluation":
490 case "evalUserDetail":
491 case "outStatisticsResultsOverview":
492 case "statisticsPassDetails":
493 $this->getStatisticsSubTabs();
494 break;
495 }
496
497 // questions tab
498 if ($this->isWriteAccessGranted() && !$this->isHiddenTab('assQuestions')) {
499 $force_active = ($_GET["up"] != "" || $_GET["down"] != "")
500 ? true
501 : false;
502 if (!$force_active) {
503 if ($_GET["browse"] == 1) {
504 $force_active = true;
505 }
506 }
507
508 switch ($this->getTestOBJ()->getQuestionSetType()) {
510 $target = $DIC->ctrl()->getLinkTargetByClass(
511 'ilTestExpresspageObjectGUI',
512 'showPage'
513 );
514 break;
515
517 $target = $DIC->ctrl()->getLinkTargetByClass('ilTestRandomQuestionSetConfigGUI');
518 break;
519
521 $target = $DIC->ctrl()->getLinkTargetByClass('ilObjTestDynamicQuestionSetConfigGUI');
522 break;
523
524 default: $target = '';
525 }
526
527 $this->tabs->addTarget(
528 "assQuestions",
529 $target,
530 array("questions", "browseForQuestions", "questionBrowser", "createQuestion",
531 "randomselect", "filter", "resetFilter", "insertQuestions",
532 "back", "createRandomSelection", "cancelRandomSelect",
533 "insertRandomSelection", "removeQuestions", "moveQuestions",
534 "insertQuestionsBefore", "insertQuestionsAfter", "confirmRemoveQuestions",
535 "cancelRemoveQuestions", "executeCreateQuestion", "cancelCreateQuestion",
536 "addQuestionpool", "saveRandomQuestions", "saveQuestionSelectionMode", "print",
537 "addsource", "removesource", "randomQuestions"),
538 "",
539 "",
540 $force_active
541 );
542 }
543
544 // info tab
545 if ($this->isReadAccessGranted() && !$this->isHiddenTab('info_short')) {
546 $this->tabs->addTarget(
547 "info_short",
548 $DIC->ctrl()->getLinkTargetByClass('ilObjTestGUI', 'infoScreen'),
549 array("infoScreen", "outIntroductionPage", "showSummary",
550 "setAnonymousId", "redirectToInfoScreen")
551 );
552 }
553
554 // settings tab
555 if ($this->isWriteAccessGranted()) {
556 if (!$this->isHiddenTab('settings')) {
557 $settingsCommands = array(
558 "marks", "showMarkSchema","addMarkStep", "deleteMarkSteps", "addSimpleMarkSchema", "saveMarks",
559 "certificate", "certificateEditor", "certificateRemoveBackground", "certificateSave",
560 "certificatePreview", "certificateDelete", "certificateUpload", "certificateImport",
561 "scoring", "defaults", "addDefaults", "deleteDefaults", "applyDefaults",
562 "inviteParticipants", "saveFixedParticipantsStatus", "searchParticipants", "addParticipants" // ARE THEY RIGHT HERE
563 );
564
565 require_once 'Modules/Test/classes/class.ilObjTestSettingsGeneralGUI.php';
566 $reflection = new ReflectionClass('ilObjTestSettingsGeneralGUI');
567 foreach ($reflection->getConstants() as $name => $value) {
568 if (substr($name, 0, 4) == 'CMD_') {
569 $settingsCommands[] = $value;
570 }
571 }
572
573 require_once 'Modules/Test/classes/class.ilObjTestSettingsScoringResultsGUI.php';
574 $reflection = new ReflectionClass('ilObjTestSettingsScoringResultsGUI');
575 foreach ($reflection->getConstants() as $name => $value) {
576 if (substr($name, 0, 4) == 'CMD_') {
577 $settingsCommands[] = $value;
578 }
579 }
580
581 $settingsCommands[] = ""; // DO NOT KNOW WHAT THIS IS DOING, BUT IT'S REQUIRED
582
583 $this->tabs->addTarget(
584 "settings",
585 $DIC->ctrl()->getLinkTargetByClass('ilObjTestSettingsGeneralGUI'),
586 $settingsCommands,
587 array("ilmarkschemagui", "ilobjtestsettingsgeneralgui", "ilobjtestsettingsscoringresultsgui", "ilobjtestgui", "ilcertificategui")
588 );
589 }
590
591 // skill service
592 if ($this->getTestOBJ()->isSkillServiceEnabled() && ilObjTest::isSkillManagementGloballyActivated()) {
593 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionSkillAssignmentsGUI.php';
594
595 $link = $DIC->ctrl()->getLinkTargetByClass(
596 array('ilTestSkillAdministrationGUI', 'ilAssQuestionSkillAssignmentsGUI'),
598 );
599
600 $this->tabs->addTarget('tst_tab_competences', $link, array(), array());
601 }
602 }
603
604 if ($this->needsDashboardTab()) {
605 $this->tabs->addTab(
606 self::TAB_ID_EXAM_DASHBOARD,
607 $DIC->language()->txt('dashboard_tab'),
608 $this->getDashboardTabTarget()
609 );
610 }
611
612 if ($this->needsResultsTab()) {
613 $this->tabs->addTab(
614 self::TAB_ID_RESULTS,
615 $DIC->language()->txt('results_tab'),
616 $this->getResultsTabTarget()
617 );
618 }
619
620 if ($this->isLpAccessGranted() && !$this->isHiddenTab(self::TAB_ID_LEARNING_PROGRESS)) {
621 $this->tabs->addTarget(
622 self::TAB_ID_LEARNING_PROGRESS,
623 $DIC->ctrl()->getLinkTargetByClass(array('illearningprogressgui'), ''),
624 '',
625 array('illplistofobjectsgui','illplistofsettingsgui','illearningprogressgui','illplistofprogressgui')
626 );
627 }
628
629 if ($this->checkScoreParticipantsTabAccess() && !$this->isHiddenTab(self::TAB_ID_MANUAL_SCORING)) {
630 include_once "./Modules/Test/classes/class.ilObjAssessmentFolder.php";
632 if (count($scoring)) {
633 // scoring tab
634 $this->tabs->addTarget(
635 self::TAB_ID_MANUAL_SCORING,
636 $DIC->ctrl()->getLinkTargetByClass('ilTestScoringByQuestionsGUI', 'showManScoringByQuestionParticipantsTable'),
637 array(
638 'showManScoringParticipantsTable', 'applyManScoringParticipantsFilter', 'resetManScoringParticipantsFilter', 'showManScoringParticipantScreen',
639 'showManScoringByQuestionParticipantsTable', 'applyManScoringByQuestionFilter', 'resetManScoringByQuestionFilter', 'saveManScoringByQuestion'
640
641 ),
642 ''
643 );
644 }
645 }
646
647 // NEW CORRECTIONS TAB
648 $setting = new ilSetting('assessment');
649 $scoring_adjust_active = (bool) $setting->get('assessment_adjustments_enabled', false);
650 if ($this->isWriteAccessGranted() && $scoring_adjust_active && !$this->isHiddenTab(self::TAB_ID_CORRECTION)) {
651 $this->tabs->addTab(
652 self::TAB_ID_CORRECTION,
653 $DIC->language()->txt(self::TAB_ID_CORRECTION),
654 $DIC->ctrl()->getLinkTargetByClass('ilTestCorrectionsGUI')
655 );
656 }
657
658 if ($this->checkStatisticsTabAccess() && !$this->isHiddenTab(self::TAB_ID_STATISTICS)) {
659 // statistics tab
660 $this->tabs->addTarget(
661 self::TAB_ID_STATISTICS,
662 $DIC->ctrl()->getLinkTargetByClass("iltestevaluationgui", "outEvaluation"),
663 array(
664 "statistics", "outEvaluation", "exportEvaluation", "detailedEvaluation", "eval_a", "evalUserDetail",
665 "passDetails", "outStatisticsResultsOverview", "statisticsPassDetails", "singleResults"
666 ),
667 ""
668 );
669 }
670
671 if ($this->isWriteAccessGranted()) {
672 if (!$this->isHiddenTab(self::TAB_ID_HISTORY)) {
673
674 // history
675 $this->tabs->addTarget(
676 self::TAB_ID_HISTORY,
677 $DIC->ctrl()->getLinkTargetByClass('ilObjTestGUI', 'history'),
678 "history",
679 ""
680 );
681 }
682
683 if (!$this->isHiddenTab(self::TAB_ID_META_DATA)) {
684 // meta data
685 include_once "Services/Object/classes/class.ilObjectMetaDataGUI.php";
686 $mdgui = new ilObjectMetaDataGUI($this->getTestOBJ());
687 $mdtab = $mdgui->getTab();
688 if ($mdtab) {
689 $this->tabs->addTarget(
690 self::TAB_ID_META_DATA,
691 $mdtab,
692 "",
693 "ilmdeditorgui"
694 );
695 }
696 }
697
698 if (!$this->isHiddenTab(self::TAB_ID_EXPORT)) {
699 // export tab
700 $this->tabs->addTarget(
701 self::TAB_ID_EXPORT,
702 $DIC->ctrl()->getLinkTargetByClass('iltestexportgui', ''),
703 '',
704 array('iltestexportgui')
705 );
706 }
707 }
708
709 if ($this->isPermissionsAccessGranted() && !$this->isHiddenTab(self::TAB_ID_PERMISSIONS)) {
710 $this->tabs->addTarget(
711 self::TAB_ID_PERMISSIONS,
712 $DIC->ctrl()->getLinkTargetByClass(array('ilObjTestGUI','ilpermissiongui'), "perm"),
713 array("perm","info","owner"),
714 'ilpermissiongui'
715 );
716 }
717
718 if ($this->getTestQuestionSetConfig()->areDepenciesBroken()) {
719 $hideTabs = $this->getTestQuestionSetConfig()->getHiddenTabsOnBrokenDepencies();
720
721 foreach ($hideTabs as $tabId) {
722 $this->tabs->removeTab($tabId);
723 }
724 }
725 }
726
727 protected function getBrowseForQuestionsTab()
728 {
729 global $DIC; /* @var ILIAS\DI\Container $DIC */
730
731 if ($this->isWriteAccessGranted()) {
732 $DIC->ctrl()->saveParameterByClass($DIC->ctrl()->getCmdClass(), 'q_id');
733 // edit page
734 $this->tabs->setBackTarget($this->lng->txt("backtocallingtest"), $DIC->ctrl()->getLinkTargetByClass($DIC->ctrl()->getCmdClass(), "questions"));
735 $this->tabs->addTarget(
736 "tst_browse_for_questions",
737 $DIC->ctrl()->getLinkTargetByClass('ilObjTestGUI', "browseForQuestions"),
738 array("browseForQuestions", "filter", "resetFilter", "resetTextFilter", "insertQuestions"),
739 "",
740 "",
741 true
742 );
743 }
744 }
745
746 protected function getRandomQuestionsTab()
747 {
748 global $DIC; /* @var ILIAS\DI\Container $DIC */
749
750 if ($this->isWriteAccessGranted()) {
751 // edit page
752 $this->tabs->setBackTarget($this->lng->txt("backtocallingtest"), $DIC->ctrl()->getLinkTargetByClass('ilObjTestGUI', "questions"));
753 $this->tabs->addTarget(
754 "random_selection",
755 $DIC->ctrl()->getLinkTargetByClass('ilObjTestGUI', "randomQuestions"),
756 array("randomQuestions"),
757 "",
758 ""
759 );
760 }
761 }
762
763 public function getQuestionsSubTabs()
764 {
765 global $DIC; /* @var ILIAS\DI\Container $DIC */
766
767 $this->tabs->activateTab(self::TAB_ID_QUESTIONS);
768
769 if (!$this->getTestOBJ()->isRandomTest()) {
770 $this->tabs->addSubTab(
771 self::SUBTAB_ID_QST_PAGE_VIEW,
772 $DIC->language()->txt('questions_per_page_view'),
773 $DIC->ctrl()->getLinkTargetByClass('iltestexpresspageobjectgui', 'showPage')
774 );
775 }
776 include_once "Services/Administration/classes/class.ilSettingsTemplate.php";
778
779 if (!$this->isHiddenTab('questions')) {
780 $this->tabs->addSubTab(
781 self::SUBTAB_ID_QST_LIST_VIEW,
782 $DIC->language()->txt('edit_test_questions'),
783 $DIC->ctrl()->getLinkTargetByClass('ilObjTestGUI', 'questions')
784 );
785 }
786
787 // print view subtab
788 if (!$this->getTestOBJ()->isRandomTest()) {
789 $this->tabs->addSubTabTarget(
790 "print_view",
791 $DIC->ctrl()->getLinkTargetByClass('ilObjTestGUI', 'print'),
792 "print",
793 "",
794 "",
795 $DIC->ctrl()->getCmd() == 'print'
796 );
797 $this->tabs->addSubTabTarget(
798 'review_view',
799 $DIC->ctrl()->getLinkTargetByClass('ilObjTestGUI', 'review'),
800 'review',
801 '',
802 '',
803 $DIC->ctrl()->getCmd() == 'review'
804 );
805 }
806 }
807
808 protected function getStatisticsSubTabs()
809 {
810 global $DIC; /* @var ILIAS\DI\Container $DIC */
811
812 // user results subtab
813 $this->tabs->addSubTabTarget(
814 "eval_all_users",
815 $DIC->ctrl()->getLinkTargetByClass("iltestevaluationgui", "outEvaluation"),
816 array("outEvaluation", "detailedEvaluation", "exportEvaluation", "evalUserDetail", "passDetails",
817 "outStatisticsResultsOverview", "statisticsPassDetails"),
818 ""
819 );
820
821 // aggregated results subtab
822 $this->tabs->addSubTabTarget(
823 "tst_results_aggregated",
824 $DIC->ctrl()->getLinkTargetByClass("iltestevaluationgui", "eval_a"),
825 array("eval_a"),
826 "",
827 ""
828 );
829
830 // question export
831 $this->tabs->addSubTabTarget(
832 "tst_single_results",
833 $DIC->ctrl()->getLinkTargetByClass("iltestevaluationgui", "singleResults"),
834 array("singleResults"),
835 "",
836 ""
837 );
838 }
839
840 public function getSettingsSubTabs()
841 {
842 global $DIC; /* @var ILIAS\DI\Container $DIC */
843
844 // general subtab
845 $this->tabs->addSubTabTarget(
846 'general',
847 $DIC->ctrl()->getLinkTargetByClass('ilObjTestSettingsGeneralGUI'),
848 '', // auto activation regardless from cmd
849 array('ilobjtestsettingsgeneralgui') // auto activation for ilObjTestSettingsGeneralGUI
850 );
851
852 if (!$this->isHiddenTab('mark_schema')) {
853 $this->tabs->addSubTabTarget(
854 'mark_schema',
855 $DIC->ctrl()->getLinkTargetByClass('ilmarkschemagui', 'showMarkSchema'),
856 '',
857 array('ilmarkschemagui')
858 );
859 }
860
861 // scoring subtab
862 $this->tabs->addSubTabTarget(
863 'scoring',
864 $DIC->ctrl()->getLinkTargetByClass('ilObjTestSettingsScoringResultsGUI'),
865 '', // auto activation regardless from cmd
866 array('ilobjtestsettingsscoringresultsgui') // auto activation for ilObjTestSettingsScoringResultsGUI
867 );
868
869 // certificate subtab
870 include_once "Services/Certificate/classes/class.ilCertificate.php";
871 if (!$this->isHiddenTab('certificate') && ilCertificate::isActive()) {
872 $this->tabs->addSubTabTarget(
873 "certificate",
874 $DIC->ctrl()->getLinkTargetByClass('ilObjTestGUI', 'certificate'),
875 array("certificate", "certificateEditor", "certificateRemoveBackground", "certificateSave",
876 "certificatePreview", "certificateDelete", "certificateUpload", "certificateImport"),
877 array("", "ilobjtestgui", "ilcertificategui")
878 );
879 }
880
881 if (!$this->isHiddenTab('defaults')) {
882 // defaults subtab
883 $this->tabs->addSubTabTarget(
884 "tst_default_settings",
885 $DIC->ctrl()->getLinkTargetByClass('ilObjTestGUI', "defaults"),
886 array("defaults", "deleteDefaults", "addDefaults", "applyDefaults"),
887 array("", "ilobjtestgui", "ilcertificategui")
888 );
889 }
890
891 $lti_settings = new ilLTIProviderObjectSettingGUI($this->testOBJ->getRefId());
892 if ($lti_settings->hasSettingsAccess()) {
893 $this->tabs->addSubTabTarget(
894 'lti_provider',
895 $DIC->ctrl()->getLinkTargetByClass(ilLTIProviderObjectSettingGUI::class),
896 '',
897 [ilLTIProviderObjectSettingGUI::class]
898 );
899 }
900 }
901
905 protected function needsDashboardTab()
906 {
907 if ($this->isHiddenTab(self::TAB_ID_EXAM_DASHBOARD)) {
908 return false;
909 }
910
911 if (!$this->checkDashboardTabAccess()) {
912 return false;
913 }
914
915 return true;
916 }
917
921 protected function needsTimeExtensionSubTab()
922 {
923 if (!($this->getTestOBJ()->getProcessingTimeInSeconds() > 0)) {
924 return false;
925 }
926
927 if ($this->getTestOBJ()->getNrOfTries() != 1) {
928 return false;
929 }
930
931 if ($this->getTestQuestionSetConfig()->areDepenciesBroken()) {
932 return false;
933 }
934
935 return true;
936 }
937
941 protected function getDashboardTabTarget()
942 {
943 global $DIC; /* @var ILIAS\DI\Container $DIC */
944
945 return $DIC->ctrl()->getLinkTargetByClass(array('ilTestDashboardGUI', 'ilTestParticipantsGUI'));
946 }
947
948 public function getDashboardSubTabs()
949 {
950 global $DIC; /* @var ILIAS\DI\Container $DIC */
951
952 if (!$this->testAccess->checkManageParticipantsAccess()) {
953 return;
954 }
955
956 $this->tabs->addSubTab(
957 self::SUBTAB_ID_FIXED_PARTICIPANTS,
959 $DIC->ctrl()->getLinkTargetByClass('ilTestParticipantsGUI')
960 );
961
962 if ($this->needsTimeExtensionSubTab()) {
963 $this->tabs->addSubTab(
964 self::SUBTAB_ID_TIME_EXTENSION,
965 $DIC->language()->txt('timing'),
966 $DIC->ctrl()->getLinkTargetByClass('ilTestParticipantsTimeExtensionGUI')
967 );
968 }
969 }
970
972 {
973 global $DIC; /* @var \ILIAS\DI\Container $DIC */
974
975 if ($this->getTestOBJ()->getFixedParticipants()) {
976 return $DIC->language()->txt('fixedparticipants_subtab');
977 }
978
979 return $DIC->language()->txt('autoparticipants_subtab');
980 }
981
985 protected function needsResultsTab()
986 {
987 return $this->needsParticipantsResultsSubTab() || $this->testOBJ->isScoreReportingEnabled() || $this->needsMySolutionsSubTab();
988 }
989
993 protected function getResultsTabTarget()
994 {
995 global $DIC; /* @var ILIAS\DI\Container $DIC */
996
997 if ($this->needsParticipantsResultsSubTab()) {
998 return $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilParticipantsTestResultsGUI'));
999 }
1000
1001 if ($this->needsLoResultsSubTab()) {
1002 return $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilTestEvalObjectiveOrientedGUI'));
1003 }
1004
1005 if ($this->needsMyResultsSubTab()) {
1006 return $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilMyTestResultsGUI', 'ilTestEvaluationGUI'));
1007 }
1008
1009 if ($this->needsMySolutionsSubTab()) {
1010 return $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilMyTestSolutionsGUI', 'ilTestEvaluationGUI'));
1011 }
1012
1013 return $DIC->ctrl()->getLinkTargetByClass('ilTestResultsGUI');
1014 }
1015
1019 public function needsMyResultsSubTab()
1020 {
1021 return $this->getTestSession()->reportableResultsAvailable($this->getTestOBJ());
1022 }
1023
1027 public function needsLoResultsSubTab()
1028 {
1029 if (!$this->needsMyResultsSubTab()) {
1030 return false;
1031 }
1032
1033 return $this->objectiveParent->isObjectiveOrientedPresentationRequired();
1034 }
1035
1040 {
1041 if ($this->testAccess->checkManageParticipantsAccess()) {
1042 return true;
1043 }
1044
1045 if ($this->testAccess->checkParticipantsResultsAccess()) {
1046 return true;
1047 }
1048
1049 return false;
1050 }
1051
1055 public function needsHighSoreSubTab()
1056 {
1057 if (!$this->needsMyResultsSubTab()) {
1058 return false;
1059 }
1060
1061 return $this->getTestOBJ()->getHighscoreEnabled();
1062 }
1063
1067 public function needsSkillResultsSubTab()
1068 {
1069 if (!$this->needsMyResultsSubTab()) {
1070 return false;
1071 }
1072
1073 return $this->getTestOBJ()->isSkillServiceToBeConsidered();
1074 }
1075
1076 public function needsMySolutionsSubTab()
1077 {
1078 return $this->getTestOBJ()->canShowSolutionPrintview($this->getTestSession()->getUserId());
1079 }
1080
1081 public function getResultsSubTabs()
1082 {
1083 global $DIC; /* @var ILIAS\DI\Container $DIC */
1084
1085 if ($this->needsParticipantsResultsSubTab()) {
1086 $this->tabs->addSubTab(
1087 self::SUBTAB_ID_PARTICIPANTS_RESULTS,
1088 $DIC->language()->txt('participants_results_subtab'),
1089 $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilParticipantsTestResultsGUI'))
1090 );
1091 }
1092
1093 if ($this->needsLoResultsSubTab()) {
1094 $this->tabs->addSubTab(
1095 self::SUBTAB_ID_LO_RESULTS,
1096 $DIC->language()->txt('tst_tab_results_objective_oriented'),
1097 $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilTestEvalObjectiveOrientedGUI'))
1098 );
1099 }
1100
1101 if ($this->needsMyResultsSubTab()) {
1102 $myResultsLabel = $DIC->language()->txt('tst_show_results');
1103
1104 if ($this->needsLoResultsSubTab()) {
1105 $myResultsLabel = $DIC->language()->txt('tst_tab_results_pass_oriented');
1106 }
1107
1108 $this->tabs->addSubTab(
1109 self::SUBTAB_ID_MY_RESULTS,
1110 $myResultsLabel,
1111 $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilMyTestResultsGUI', 'ilTestEvaluationGUI'))
1112 // 'ilTestEvaluationGUI' => 'outUserResultsOverview'
1113 );
1114 }
1115
1116 if ($this->needsSkillResultsSubTab()) {
1117 $this->tabs->addSubTab(
1118 self::SUBTAB_ID_SKILL_RESULTS,
1119 $DIC->language()->txt('tst_show_comp_results'),
1120 $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilTestSkillEvaluationGUI'))
1121 );
1122 }
1123
1124 if ($this->needsHighSoreSubTab()) {
1125 $this->tabs->addSubTab(
1126 self::SUBTAB_ID_HIGHSCORE,
1127 $DIC->language()->txt('tst_show_toplist'),
1128 $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilTestToplistGUI'), 'outResultsToplist')
1129 );
1130 }
1131
1132 if ($this->needsMySolutionsSubTab()) {
1133 $this->tabs->addSubTab(
1134 self::SUBTAB_ID_MY_SOLUTIONS,
1135 $DIC->language()->txt('tst_list_of_answers_show'),
1136 $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilMyTestSolutionsGUI', 'ilTestEvaluationGUI'))
1137 );
1138 }
1139 }
1140}
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
GUI class for LTI provider object settings.
static checkAccess($a_ref_id, $a_allow_only_read=true)
check access to learning progress
static _getManualScoring()
Retrieve the manual scoring settings.
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()
Class ilObjectMetaDataGUI.
ILIAS Setting Class.
Settings template application class.
__construct(ilTestAccess $testAccess, ilTestObjectiveOrientedContainer $objectiveParent)
ilTestTabsManager constructor.
setParentBackLabel($parentBackLabel)
setParentBackHref($parentBackHref)
const TAB_ID_QUESTIONS
(Sub-)Tab ID constants
setTestQuestionSetConfig(ilTestQuestionSetConfig $testQuestionSetConfig)
setTestOBJ(ilObjTest $testOBJ)
$template
$target
Definition: test.php:19
global $DIC
Definition: saml.php:7