4 require_once
'./Modules/Test/classes/class.ilTestPlayerAbstractGUI.php';
32 global
$ilDB, $ilPluginAdmin,
$lng, $ilTabs;
36 $ilTabs->clearTargets();
38 $cmd = $this->ctrl->getCmd();
39 $next_class = $this->ctrl->getNextClass($this);
41 $this->ctrl->saveParameter($this,
"sequence");
42 $this->ctrl->saveParameter($this,
"pmode");
43 $this->ctrl->saveParameter($this,
"active_id");
55 $this->testSequence = $testSequenceFactory->getSequenceByTestSession($this->testSession);
56 $this->testSequence->loadFromDb();
57 $this->testSequence->loadQuestions();
59 require_once
'Modules/Test/classes/class.ilTestQuestionRelatedObjectivesList.php';
62 include_once
'Services/jQuery/classes/class.iljQueryUtil.php';
64 include_once
"./Services/YUI/classes/class.ilYuiUtil.php";
73 case 'ilassquestionpagegui':
79 require_once
"./Modules/TestQuestionPool/classes/class.ilAssQuestionPageGUI.php";
81 $ret = $this->ctrl->forwardCommand($page_gui);
84 case 'iltestsubmissionreviewgui':
88 require_once
'./Modules/Test/classes/class.ilTestSubmissionReviewGUI.php';
91 $ret = $this->ctrl->forwardCommand($gui);
94 case 'ilassquestionhintrequestgui':
98 $questionGUI = $this->
object->createQuestionGUI(
99 "", $this->testSequence->getQuestionForSequence($this->getCurrentSequenceElement())
102 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionHintTracking.php';
104 $questionGUI->object->getId(), $this->testSession->getActiveId(), $this->testSession->getPass()
107 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionHintRequestGUI.php';
110 $ret = $this->ctrl->forwardCommand($gui);
114 case 'iltestsignaturegui':
118 require_once
'./Modules/Test/classes/class.ilTestSignatureGUI.php';
120 $ret = $this->ctrl->forwardCommand($gui);
123 case 'iltestpasswordprotectiongui':
127 require_once
'Modules/Test/classes/class.ilTestPasswordProtectionGUI.php';
129 $ret = $this->ctrl->forwardCommand($gui);
153 $this->testSession->setUserId($ilUser->getId());
154 $this->testSession->setAnonymousId(
$_SESSION[
"tst_access_code"][$this->object->getTestId()]);
156 $this->testSession->saveToDb();
158 $active_id = $this->testSession->getActiveId();
159 $this->ctrl->setParameter($this,
"active_id", $active_id);
161 $shuffle = $this->
object->getShuffleQuestions();
162 if ($this->object->isRandomTest())
166 $this->
object->loadQuestions();
170 assQuestion::_updateTestPassResults(
171 $active_id, $this->testSession->getPass(), $this->
object->areObligationsEnabled(), null, $this->
object->id
175 if( !$this->testSequence->hasSequence() )
177 $this->testSequence->createNewSequence($this->object->getQuestionCount(), $shuffle);
178 $this->testSequence->saveToDb();
181 $this->testSequence->loadFromDb();
182 $this->testSequence->loadQuestions();
184 if( $this->testSession->isObjectiveOriented() )
186 require_once
'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
189 $objectivesAdapter->notifyTestStart($this->testSession, $this->object->getId());
190 $objectivesAdapter->prepareTestPass($this->testSession, $this->testSequence);
192 $objectivesAdapter->buildQuestionRelatedObjectiveList(
193 $this->testSequence, $this->questionRelatedObjectivesList
196 if( $this->testSequence->hasOptionalQuestions() )
200 $this->testSequence->reorderOptionalQuestionsToSequenceEnd();
201 $this->testSequence->saveToDb();
205 $active_time_id = $this->
object->startWorkingTime(
206 $this->testSession->getActiveId(), $this->testSession->getPass()
208 $_SESSION[
"active_time_id"] = $active_time_id;
210 $sequenceElement = $this->testSequence->getFirstSequence();
212 $this->ctrl->setParameter($this,
'sequence', $sequenceElement);
213 $this->ctrl->setParameter($this,
'pmode',
'');
215 if ($this->object->getListOfQuestionsStart())
225 if( $sequenceElement ===
false )
230 if( $sequenceElement < 1 )
235 if( !$this->testSequence->getPositionOfSequence($sequenceElement) )
247 $_SESSION[
"active_time_id"]= $this->
object->startWorkingTime(
248 $this->testSession->getActiveId(), $this->testSession->getPass()
255 $sequenceElement = $this->testSequence->getFirstSequence();
258 $this->testSession->setLastSequence($sequenceElement);
259 $this->testSession->saveToDb();
262 $questionId = $this->testSequence->getQuestionForSequence($sequenceElement);
264 if( !(
int)$questionId && $this->testSession->isObjectiveOriented() )
270 $this->testSession->getActiveId(), $questionId, $this->testSession->getPass()
273 $this->testSession->getActiveId(), $this->testSession->getPass(),
274 $this->testSequence->getOrderedSequenceQuestions()
280 if( !$presentationMode )
288 $instantResponse =
true;
298 $questionGui->setSequenceNumber($this->testSequence->getPositionOfSequence($sequenceElement));
299 $questionGui->setQuestionCount($this->testSequence->getUserQuestionCount());
301 require_once
'Modules/Test/classes/class.ilTestQuestionHeaderBlockBuilder.php';
303 $headerBlockBuilder->setHeaderMode($this->object->getTitleOutput());
304 $headerBlockBuilder->setQuestionTitle($questionGui->object->getTitle());
305 $headerBlockBuilder->setQuestionPoints($questionGui->object->getPoints());
306 $headerBlockBuilder->setQuestionPosition($this->testSequence->getPositionOfSequence($sequenceElement));
307 $headerBlockBuilder->setQuestionCount($this->testSequence->getUserQuestionCount());
308 $headerBlockBuilder->setQuestionPostponed($this->testSequence->isPostponedQuestion($questionId));
309 $headerBlockBuilder->setQuestionObligatory(
312 if( $this->testSession->isObjectiveOriented() )
314 require_once
'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
316 $objectivesAdapter->buildQuestionRelatedObjectiveList($this->testSequence, $this->questionRelatedObjectivesList);
317 $this->questionRelatedObjectivesList->loadObjectivesTitles();
319 $objectivesString = $this->questionRelatedObjectivesList->getQuestionRelatedObjectiveTitles($questionId);
320 $headerBlockBuilder->setQuestionRelatedObjectives($objectivesString);
322 $questionGui->setQuestionHeaderBlockBuilder($headerBlockBuilder);
324 $this->
prepareTestPage($presentationMode, $sequenceElement, $questionId);
327 $navigationToolbarGUI->setFinishTestButtonEnabled(
true);
329 $this->ctrl->setParameter($this,
'sequence', $sequenceElement);
330 $this->ctrl->setParameter($this,
'pmode', $presentationMode);
333 switch($presentationMode)
337 $navigationToolbarGUI->setDisabledStateEnabled(
true);
339 $this->
showQuestionEditable($questionGui, $formAction, $isQuestionWorkedThrough, $instantResponse);
345 $navigationToolbarGUI->setFinishTestButtonPrimary(!$missingQuestionResultExists);
347 if( $this->testSequence->isQuestionOptional($questionGui->object->getId()) )
352 $this->
showQuestionViewable($questionGui, $formAction, $isQuestionWorkedThrough, $instantResponse);
358 require_once
'Modules/Test/exceptions/class.ilTestException.php';
362 $navigationToolbarGUI->build();
369 if ($instantResponse)
385 if( $this->object->isForceInstantFeedbackEnabled() )
392 $questionId = $this->testSequence->getQuestionForSequence(
397 $this->testSession->getActiveId(), $this->testSession->getPass()
404 $nextSequenceElement = $this->testSequence->getFirstSequence();
407 $this->testSession->setLastSequence($nextSequenceElement);
408 $this->testSession->saveToDb();
410 $this->ctrl->setParameter($this,
'sequence', $nextSequenceElement);
411 $this->ctrl->setParameter($this,
'pmode',
'');
421 $questionId = $this->testSequence->getQuestionForSequence(
426 $this->testSession->getActiveId(), $this->testSession->getPass()
429 if( $this->object->isForceInstantFeedbackEnabled() )
431 $this->ctrl->setParameter($this,
'instresp', 1);
433 $this->testSequence->setQuestionChecked($questionId);
434 $this->testSequence->saveToDb();
442 $this->ctrl->setParameter($this,
'pmode',
'');
459 $this->testSequence->getQuestionForSequence($currentSequenceElement)
462 $currentQuestionOBJ->resetUsersAnswer(
463 $this->testSession->getActiveId(), $this->testSession->getPass()
466 $this->ctrl->saveParameter($this,
'sequence');
476 $nextSequenceElement = $this->testSequence->getNextSequence($curSequenceElement);
480 $nextSequenceElement = $this->testSequence->getFirstSequence();
483 if( $this->object->isPostponingEnabled() )
485 $this->testSequence->postponeSequence($curSequenceElement);
486 $this->testSequence->saveToDb();
489 $this->ctrl->setParameter($this,
'sequence', $nextSequenceElement);
490 $this->ctrl->setParameter($this,
'pmode',
'');
497 $sequenceElement = $this->testSequence->getNextSequence(
503 $sequenceElement = $this->testSequence->getFirstSequence();
506 $this->ctrl->setParameter($this,
'sequence', $sequenceElement);
507 $this->ctrl->setParameter($this,
'pmode',
'');
514 $sequenceElement = $this->testSequence->getPreviousSequence(
520 $sequenceElement = $this->testSequence->getLastSequence();
523 $this->ctrl->setParameter($this,
'sequence', $sequenceElement);
524 $this->ctrl->setParameter($this,
'pmode',
'');
531 return $sequenceElement == $this->testSequence->getFirstSequence();
536 return $sequenceElement == $this->testSequence->getLastSequence();
554 return $this->testSequence->getQuestionForSequence(
$_GET[
"sequence"]);
563 $this->saveResult = FALSE;
566 $formtimestamp =
$_POST[
"formtimestamp"];
567 if (strlen($formtimestamp) == 0) $formtimestamp =
$_GET[
"formtimestamp"];
568 if ($formtimestamp !=
$_SESSION[
"formtimestamp"])
570 $_SESSION[
"formtimestamp"] = $formtimestamp;
581 $q_id = $this->testSequence->getQuestionForSequence(
$_GET[
"sequence"]);
582 if (is_numeric($q_id) && (
int)$q_id)
586 $active_id = $this->testSession->getActiveId();
587 if ($this->object->isRandomTest())
589 $pass = $this->
object->_getPass($active_id);
591 $this->saveResult = $questionOBJ->persistWorkingState(
592 $active_id,
$pass, $this->object->areObligationsEnabled(), $authorized
595 if( $authorized && $this->testSession->isObjectiveOriented() )
597 require_once
'Modules/Course/classes/Objectives/class.ilLOTestQuestionAdapter.php';
599 $objectivesAdapter->updateQuestionResult($this->testSession, $questionOBJ);
602 if( $authorized && $this->object->isSkillServiceToBeConsidered() )
609 if ($this->saveResult == FALSE)
611 $this->ctrl->setParameter($this,
"save_error",
"1");
620 $questionId = $this->testSequence->getQuestionForSequence(
627 $this->object->isInstantFeedbackAnswerFixationEnabled()
630 $this->testSequence->setQuestionChecked($questionId);
631 $this->testSequence->saveToDb();
634 $this->ctrl->setParameter($this,
'instresp', 1);
640 $questionId = $this->testSequence->getQuestionForSequence(
655 if ($this->testSession->getActiveId() > 0)
657 if ($this->testSequence->hasRandomQuestionsForPass($this->testSession->getActiveId(), $this->testSession->getPass()) > 0)
665 __METHOD__.
' Random Questions allready exists for user '.
666 $ilUser->getId().
' in test '.$this->
object->getTestId()
678 $ilLog->write(__METHOD__.
' '.sprintf(
679 $this->lng->txt(
"error_random_question_generation"), $ilUser->getId(), $this->
object->getTestId()
692 require_once
'Modules/Test/classes/class.ilTestRandomQuestionSetConfig.php';
694 $questionSetConfig->loadFromDb();
696 require_once
'Modules/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinitionFactory.php';
699 require_once
'Modules/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinitionList.php';
701 $sourcePoolDefinitionList->loadDefinitions();
703 $this->processLocker->requestRandomPassBuildLock($sourcePoolDefinitionList->hasTaxonomyFilters());
707 require_once
'Modules/Test/classes/class.ilTestRandomQuestionSetStagingPoolQuestionList.php';
710 require_once
'Modules/Test/classes/class.ilTestRandomQuestionSetBuilder.php';
713 $questionSetBuilder->performBuild($this->testSession);
716 $this->processLocker->releaseRandomPassBuildLock();
726 $active_id = $this->testSession->getActiveId();
727 $this->ctrl->setParameter($this,
"active_id", $active_id);
729 $active_time_id = $this->
object->startWorkingTime($active_id, $this->testSession->getPass());
730 $_SESSION[
"active_time_id"] = $active_time_id;
733 if ($this->object->isRandomTest())
735 if (!$this->testSequence->hasRandomQuestionsForPass($active_id, $this->testSession->getPass()))
742 $shuffle = $this->
object->getShuffleQuestions();
743 if ($this->object->isRandomTest())
748 assQuestion::_updateTestPassResults(
749 $active_id, $this->testSession->getPass(), $this->
object->areObligationsEnabled(), null, $this->
object->id
753 if( !$this->testSequence->hasSequence() )
755 $this->testSequence->createNewSequence($this->object->getQuestionCount(), $shuffle);
756 $this->testSequence->saveToDb();
759 if ($this->object->getListOfQuestionsStart())
764 $this->ctrl->setParameter($this,
'sequence', $this->testSession->getLastSequence());
765 $this->ctrl->setParameter($this,
'pmode',
'');
771 return $this->testSequence->isPostponedQuestion($questionId);
780 include_once (
"./Modules/Test/classes/class.ilObjAssessmentFolder.php");
783 require_once
'Modules/TestQuestionPool/classes/class.ilAssQuestionUserSolutionAdopter.php';
786 $userSolutionAdopter->setUserId($ilUser->getId());
787 $userSolutionAdopter->setActiveId($this->testSession->getActiveId());
788 $userSolutionAdopter->setTargetPass($this->testSequence->getPass());
789 $userSolutionAdopter->setQuestionIds($this->testSequence->getOptionalQuestions());
791 $userSolutionAdopter->perform();
798 if( $this->testSequence->isAnsweringOptionalQuestionsConfirmed() )
803 $questionId = $this->testSequence->getQuestionForSequence($sequenceKey);
805 if( !$this->testSequence->isQuestionOptional($questionId) )
820 ilUtil::sendFailure(sprintf($this->lng->txt(
'tst_objective_oriented_test_pass_without_questions'), $this->
object->getTitle()),
true);
isShowingPostponeStatusReguired($questionId)
isValidSequenceElement($sequenceElement)
isQuestionSummaryFinishTestButtonRequired()
populateQuestionOptionalMessage()
showQuestionEditable(assQuestionGUI $questionGui, $formAction, $isQuestionWorkedThrough, $instantResponse)
getPresentationModeParameter()
getObjectiveOrientedContainer()
static getInstance(ilDB $db, ilObjTest $testOBJ, ilTestRandomQuestionSetConfig $questionSetConfig, ilTestRandomQuestionSetSourcePoolDefinitionList $sourcePoolDefinitionList, ilTestRandomQuestionSetStagingPoolQuestionList $stagingPoolQuestionList)
Output class for assessment test execution.
updateWorkingTime()
updates working time and stores state saveresult to see if question has to be stored or not ...
handleTearsAndAngerNoObjectiveOrientedQuestion()
submitSolutionAndNextCmd()
getNextCommandParameter()
isLastQuestionInSequence($sequenceElement)
isFirstQuestionInSequence($sequenceElement)
executeCommand()
Execute Command.
handleQuestionActionCmd()
resumePlayerCmd()
Resume a test at the last position.
handleUserSettings()
Handles some form parameters on starting and resuming a test.
_enabledAssessmentLogging()
check wether assessment logging is enabled or not
Base Exception for all Exceptions relating to Modules/Test.
prepareTestPage($presentationMode, $sequenceElement, $questionId)
populateInstantResponseBlocks(assQuestionGUI $questionGui, $authorizedSolution)
static isQuestionObligatory($question_id)
checks wether the question with given id is marked as obligatory or not
isNrOfTriesReached()
nr of tries exceeded
ensureExistingTestSession(ilTestSession $testSession)
static getInstance(ilTestSession $a_test_session)
getInstantResponseParameter()
isOptionalQuestionAnsweringConfirmationRequired($sequenceKey)
handleSkillTriggering(ilTestSession $testSession)
Class ilTestSubmissionReviewGUI.
getCommand($cmd)
Retrieves the ilCtrl command.
const PRESENTATION_MODE_EDIT
populateTestNavigationToolbar(ilTestNavigationToolbarGUI $toolbarGUI)
Basic GUI class for assessment questions.
const PRESENTATION_MODE_VIEW
const SUBMIT_INTERMEDIATE_SOLUTION
initProcessLocker($activeId)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
handlePasswordProtectionRedirect()
saveQuestionSolution($authorized=true, $force=false)
saves the user input of a question
showQuestionViewable(assQuestionGUI $questionGui, $formAction, $isQuestionWorkedThrough, $instantResponse)
performTearsAndAngerBrokenConfessionChecks()
populateQuestionNavigation($sequenceElement, $disabled)
$questionRelatedObjectivesList
generateRandomTestPassForActiveUser()
getNextSequenceParameter()
getQuestionGuiInstance($questionId, $fromCache=true)
static initjQuery($a_tpl=null)
Init jQuery.
getQuestionInstance($questionId, $fromCache=true)
getQuestionsDefaultPresentationMode($isQuestionWorkedThrough)
handleTearsAndAngerQuestionIsNull($questionId, $sequenceElement)
isMaxProcessingTimeReached()
Checks wheather the maximum processing time is reached or not.
getCurrentSequenceElement()
static _isWorkedThrough($active_id, $question_id, $pass=NULL)
Returns true if the question was worked through in the given pass Worked through means that the user ...
getTestNavigationToolbarGUI()
static initConnectionWithAnimation()
Init YUI Connection module.
canSaveResult()
Returns TRUE if the answers of the current user could be saved.
adoptUserSolutionsFromPreviousPass()
static isTestExecutionCommand($cmd)
isParticipantsAnswerFixed($questionId)
Output class for assessment test execution.
static missingResultRecordExists($activeId, $pass, $questionIds)