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