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 
61  protected $objectiveParent;
62 
66  protected $lng;
67 
71  protected $testOBJ;
72 
76  protected $testSession;
77 
82 
86  protected $parentBackHref;
87 
91  protected $parentBackLabel;
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) {
118  case self::TAB_ID_EXAM_DASHBOARD:
119  case self::TAB_ID_RESULTS:
120 
121  $this->tabs->activateTab($tabId);
122  }
123  }
124 
128  public function activateSubTab($subTabId)
129  {
130  switch ($subTabId) {
131  case self::SUBTAB_ID_FIXED_PARTICIPANTS:
132  case self::SUBTAB_ID_TIME_EXTENSION:
133 
134  case self::SUBTAB_ID_PARTICIPANTS_RESULTS:
135  case self::SUBTAB_ID_MY_RESULTS:
136  case self::SUBTAB_ID_LO_RESULTS:
137  case self::SUBTAB_ID_HIGHSCORE:
138  case self::SUBTAB_ID_SKILL_RESULTS:
139  case self::SUBTAB_ID_MY_SOLUTIONS:
140 
141  case self::SUBTAB_ID_QST_LIST_VIEW:
142  case self::SUBTAB_ID_QST_PAGE_VIEW:
143 
144  $this->tabs->activateSubTab($subTabId);
145  }
146  }
147 
151  public function getTestOBJ()
152  {
153  return $this->testOBJ;
154  }
155 
159  public function setTestOBJ(ilObjTest $testOBJ)
160  {
161  $this->testOBJ = $testOBJ;
162  }
163 
167  public function getTestSession()
168  {
169  return $this->testSession;
170  }
171 
175  public function setTestSession($testSession)
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  {
225  return $this->parentBackLabel;
226  }
227 
232  {
233  $this->parentBackLabel = $parentBackLabel;
234  }
235 
239  public function getParentBackHref()
240  {
241  return $this->parentBackHref;
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 
351  protected function checkScoreParticipantsTabAccess()
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)) {
459  $this->getBrowseForQuestionsTab();
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 }
Class ilObjectMetaDataGUI.
setTestQuestionSetConfig(ilTestQuestionSetConfig $testQuestionSetConfig)
$template
const QUESTION_SET_TYPE_RANDOM
type setting value for random question set
global $DIC
Definition: saml.php:7
$_GET["client_id"]
__construct(ilTestAccess $testAccess, ilTestObjectiveOrientedContainer $objectiveParent)
ilTestTabsManager constructor.
const TAB_ID_QUESTIONS
(Sub-)Tab ID constants
setParentBackHref($parentBackHref)
setTestOBJ(ilObjTest $testOBJ)
static checkAccess($a_ref_id, $a_allow_only_read=true)
check access to learning progress
GUI class for LTI provider object settings.
static isSkillManagementGloballyActivated()
static _getManualScoring()
Retrieve the manual scoring settings.
const QUESTION_SET_TYPE_FIXED
type setting value for fixed question set
setParentBackLabel($parentBackLabel)
const QUESTION_SET_TYPE_DYNAMIC
type setting value for dynamic question set (continues testing mode)
$target
Definition: test.php:19
Settings template application class.