/**
  * Store result and update objective status
  * @param ilTestSession $a_test_session
  * @param ilTestSequence $a_test_sequence
  * @param assQuestion $a_question
  */
 public static function updateObjectiveStatus(ilTestSession $a_test_session, ilTestSequence $a_test_sequence, assQuestion $a_question)
 {
     $adapter = new self($a_test_session->getUserId(), $a_test_session->getObjectiveOrientedContainerId());
     $adapter->initTestRun($a_test_session);
     $adapter->updateQuestionResult($a_test_session, $a_question);
     return true;
     /*
     		$usr_id = $a_test_session->getUserId();
     		$crs_id = $a_test_session->getObjectiveOrientedContainerId();
     		
     		$question_id = $a_question->getId();
     		
     		$points_reached = $a_question->getReachedPoints($a_test_session->getActiveId(), $a_test_session->getPass());
     		//$points_max = $a_question->getMaxPoints();
     
     		if( $a_test_sequence instanceof ilTestSequenceFixedQuestionSet )
     		{
     			// make some noise (with question id only)
     		}
     		elseif( $a_test_sequence instanceof ilTestSequenceRandomQuestionSet )
     		{
     			$respSrcPoolDefId = $a_test_sequence->getResponsibleSourcePoolDefinitionId($question_id);
     
     			// make some noise (with question id and responsible source pool definition)
     		}
     */
 }
 /**
  * @param ilTestSession $testSession
  */
 protected function handleSkillTriggering(ilTestSession $testSession)
 {
     $questionList = $this->buildTestPassQuestionList();
     $questionList->load();
     $testResults = $this->object->getTestResult($testSession->getActiveId(), $testSession->getPass(), true);
     require_once 'Modules/Test/classes/class.ilTestSkillEvaluation.php';
     $skillEvaluation = new ilTestSkillEvaluation($this->db, $this->object->getTestId(), $this->object->getRefId());
     $skillEvaluation->setUserId($testSession->getUserId());
     $skillEvaluation->setActiveId($testSession->getActiveId());
     $skillEvaluation->setPass($testSession->getPass());
     $skillEvaluation->setNumRequiredBookingsForSkillTriggering($this->assSettings->get('ass_skl_trig_num_answ_barrier', ilObjAssessmentFolder::DEFAULT_SKL_TRIG_NUM_ANSWERS_BARRIER));
     $skillEvaluation->init($questionList);
     $skillEvaluation->evaluate($testResults);
     $skillEvaluation->handleSkillTriggering();
 }
 public function show()
 {
     require_once 'class.ilTestEvaluationGUI.php';
     require_once './Services/PDFGeneration/classes/class.ilPDFGeneration.php';
     global $ilUser, $ilObjDataCache;
     $template = new ilTemplate("tpl.il_as_tst_submission_review.html", TRUE, TRUE, "Modules/Test");
     $this->ctrl->setParameter($this, "skipfinalstatement", 1);
     $template->setVariable("FORMACTION", $this->ctrl->getFormAction($this->testOutputGUI, 'redirectBack') . '&reviewed=1');
     $template->setVariable("BUTTON_CONTINUE", $this->lng->txt("btn_next"));
     $template->setVariable("BUTTON_BACK", $this->lng->txt("btn_previous"));
     if ($this->object->getListOfQuestionsEnd()) {
         $template->setVariable("CANCEL_CMD", 'outQuestionSummary');
     } else {
         $template->setVariable("CANCEL_CMD", 'backFromSummary');
     }
     $active = $this->object->getActiveIdOfUser($ilUser->getId());
     require_once 'Modules/Test/classes/class.ilTestResultHeaderLabelBuilder.php';
     $testResultHeaderLabelBuilder = new ilTestResultHeaderLabelBuilder($this->lng, $ilObjDataCache);
     $objectivesList = null;
     if ($this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired()) {
         $testSequence = $this->testSequenceFactory->getSequenceByActiveIdAndPass($this->testSession->getActiveId(), $this->testSession->getPass());
         $testSequence->loadFromDb();
         $testSequence->loadQuestions();
         require_once 'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
         $objectivesAdapter = ilLOTestQuestionAdapter::getInstance($this->testSession);
         $objectivesList = $this->buildQuestionRelatedObjectivesList($objectivesAdapter, $testSequence);
         $objectivesList->loadObjectivesTitles();
         $testResultHeaderLabelBuilder->setObjectiveOrientedContainerId($this->testSession->getObjectiveOrientedContainerId());
         $testResultHeaderLabelBuilder->setUserId($this->testSession->getUserId());
         $testResultHeaderLabelBuilder->setTestObjId($this->object->getId());
         $testResultHeaderLabelBuilder->setTestRefId($this->object->getRefId());
         $testResultHeaderLabelBuilder->initObjectiveOrientedMode();
     }
     $results = $this->object->getTestResult($active, $this->testSession->getPass(), false, !$this->getObjectiveOrientedContainer()->isObjectiveOrientedPresentationRequired());
     $testevaluationgui = new ilTestEvaluationGUI($this->object);
     $results_output = $testevaluationgui->getPassListOfAnswers($results, $active, $this->testSession->getPass(), false, false, false, false, false, $objectivesList, $testResultHeaderLabelBuilder);
     if ($this->object->getShowExamviewPdf()) {
         $template->setCurrentBlock("pdf_export");
         $template->setVariable("PDF_TEXT", $this->lng->txt("pdf_export"));
         global $ilSetting;
         $inst_id = $ilSetting->get('inst_id', null);
         $path = ilUtil::getWebspaceDir() . '/assessment/' . $this->testOutputGUI->object->getId() . '/exam_pdf';
         if (!is_dir($path)) {
             ilUtil::makeDirParents($path);
         }
         $filename = $path . '/exam_N' . $inst_id . '-' . $this->testOutputGUI->object->getId() . '-' . $active . '-' . $this->testSession->getPass() . '.pdf';
         require_once 'class.ilTestPDFGenerator.php';
         ilTestPDFGenerator::generatePDF($results_output, ilTestPDFGenerator::PDF_OUTPUT_FILE, $filename);
         $template->setVariable("PDF_FILE_LOCATION", $filename);
     }
     if ($this->object->getShowExamviewHtml()) {
         if ($this->object->getListOfQuestionsEnd()) {
             $template->setVariable("CANCEL_CMD_BOTTOM", 'outQuestionSummary');
         } else {
             $template->setVariable("CANCEL_CMD_BOTTOM", 'backFromSummary');
         }
         $template->setVariable("BUTTON_CONTINUE_BOTTOM", $this->lng->txt("btn_next"));
         $template->setVariable("BUTTON_BACK_BOTTOM", $this->lng->txt("btn_previous"));
         $template->setVariable('HTML_REVIEW', $results_output);
     }
     $this->tpl->setVariable($this->getContentBlockName(), $template->get());
 }
 public static function getInstance(ilTestSession $a_test_session)
 {
     $adapter = new self($a_test_session->getUserId(), $a_test_session->getObjectiveOrientedContainerId());
     $adapter->initTestRun($a_test_session);
     return $adapter;
 }