1<?php 2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */ 3 4require_once './Modules/Test/classes/class.ilTestServiceGUI.php'; 5 6/** 7 * @author Björn Heyser <bheyser@databay.de> 8 * @version $Id$ 9 * 10 * @package Modules/Test 11 * 12 * @ilCtrl_Calls ilTestEvalObjectiveOrientedGUI: ilAssQuestionPageGUI 13 * @ilCtrl_Calls ilTestEvalObjectiveOrientedGUI: ilTestResultsToolbarGUI 14 */ 15class ilTestEvalObjectiveOrientedGUI extends ilTestServiceGUI 16{ 17 public function executeCommand() 18 { 19 $this->ctrl->saveParameter($this, "active_id"); 20 21 switch ($this->ctrl->getNextClass($this)) { 22 case 'ilassquestionpagegui': 23 require_once 'Modules/Test/classes/class.ilAssQuestionPageCommandForwarder.php'; 24 $forwarder = new ilAssQuestionPageCommandForwarder(); 25 $forwarder->setTestObj($this->object); 26 $forwarder->forward(); 27 break; 28 29 default: 30 $cmd = $this->ctrl->getCmd('showVirtualPass') . 'Cmd'; 31 $this->$cmd(); 32 } 33 } 34 35 public function showVirtualPassSetTableFilterCmd() 36 { 37 $tableGUI = $this->buildPassDetailsOverviewTableGUI($this, 'showVirtualPass'); 38 $tableGUI->initFilter(); 39 $tableGUI->resetOffset(); 40 $tableGUI->writeFilterToSession(); 41 $this->showVirtualPassCmd(); 42 } 43 44 public function showVirtualPassResetTableFilterCmd() 45 { 46 $tableGUI = $this->buildPassDetailsOverviewTableGUI($this, 'showVirtualPass'); 47 $tableGUI->initFilter(); 48 $tableGUI->resetOffset(); 49 $tableGUI->resetFilter(); 50 $this->showVirtualPassCmd(); 51 } 52 53 private function showVirtualPassCmd() 54 { 55 $testSession = $this->testSessionFactory->getSession(); 56 57 if (!$this->object->getShowPassDetails()) { 58 $executable = $this->object->isExecutable($testSession, $testSession->getUserId()); 59 60 if ($executable["executable"]) { 61 $this->ctrl->redirectByClass("ilobjtestgui", "infoScreen"); 62 } 63 } 64 65 // prepare generation before contents are processed (for mathjax) 66 if ($this->isPdfDeliveryRequest()) { 67 ilPDFGeneratorUtils::prepareGenerationRequest("Test", PDF_USER_RESULT); 68 } 69 70 $toolbar = $this->buildUserTestResultsToolbarGUI(); 71 $this->ctrl->setParameter($this, 'pdf', '1'); 72 $toolbar->setPdfExportLinkTarget($this->ctrl->getLinkTarget($this, 'showVirtualPass')); 73 $this->ctrl->setParameter($this, 'pdf', ''); 74 $toolbar->build(); 75 76 $virtualSequence = $this->service->buildVirtualSequence($testSession); 77 $userResults = $this->service->getVirtualSequenceUserResults($virtualSequence); 78 79 require_once 'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php'; 80 $objectivesAdapter = ilLOTestQuestionAdapter::getInstance($testSession); 81 82 $objectivesList = $this->buildQuestionRelatedObjectivesList($objectivesAdapter, $virtualSequence); 83 $objectivesList->loadObjectivesTitles(); 84 85 require_once 'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php'; 86 $testResultHeaderLabelBuilder = new ilTestResultHeaderLabelBuilder($this->lng, $this->objCache); 87 88 $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($testSession->getObjectiveOrientedContainerId()); 89 $testResultHeaderLabelBuilder->setUserId($testSession->getUserId()); 90 $testResultHeaderLabelBuilder->setTestObjId($this->object->getId()); 91 $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId()); 92 $testResultHeaderLabelBuilder->initObjectiveOrientedMode(); 93 94 $tpl = new ilTemplate('tpl.il_as_tst_virtual_pass_details.html', false, false, 'Modules/Test'); 95 96 $command_solution_details = ""; 97 if ($this->object->getShowSolutionDetails()) { 98 $command_solution_details = "outCorrectSolution"; 99 } 100 101 $questionAnchorNav = $listOfAnswers = $this->object->canShowSolutionPrintview(); 102 103 if ($listOfAnswers) { 104 $list_of_answers = $this->getPassListOfAnswers( 105 $userResults, 106 $testSession->getActiveId(), 107 null, 108 $this->object->getShowSolutionListComparison(), 109 false, 110 false, 111 false, 112 true, 113 $objectivesList, 114 $testResultHeaderLabelBuilder 115 ); 116 $tpl->setVariable("LIST_OF_ANSWERS", $list_of_answers); 117 } 118 119 foreach ($objectivesList->getObjectives() as $loId => $loTitle) { 120 $userResultsForLO = $objectivesList->filterResultsByObjective($userResults, $loId); 121 122 $overviewTableGUI = $this->getPassDetailsOverviewTableGUI( 123 $userResultsForLO, 124 $testSession->getActiveId(), 125 null, 126 $this, 127 "showVirtualPass", 128 $command_solution_details, 129 $questionAnchorNav, 130 $objectivesList, 131 false 132 ); 133 $overviewTableGUI->setTitle($testResultHeaderLabelBuilder->getVirtualPassDetailsHeaderLabel( 134 $objectivesList->getObjectiveTitleById($loId) 135 )); 136 137 require_once 'Modules/Test/classes/class.ilTestLearningObjectivesStatusGUI.php'; 138 $loStatus = new ilTestLearningObjectivesStatusGUI($this->lng); 139 $loStatus->setCrsObjId($this->getObjectiveOrientedContainer()->getObjId()); 140 $loStatus->setUsrId($testSession->getUserId()); 141 $lostatus = $loStatus->getHTML($loId); 142 143 $tpl->setCurrentBlock('pass_details'); 144 $tpl->setVariable("PASS_DETAILS", $overviewTableGUI->getHTML()); 145 $tpl->setVariable("LO_STATUS", $lostatus); 146 $tpl->parseCurrentBlock(); 147 } 148 149 $this->populateContent($this->ctrl->getHTML($toolbar) . $tpl->get()); 150 } 151} 152