4require_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");
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);
Basic GUI class for assessment questions.
static missingResultRecordExists($activeId, $pass, $questionIds)
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 ...
static getInstance(ilTestSession $a_test_session)
_enabledAssessmentLogging()
check wether assessment logging is enabled or not
static isQuestionObligatory($question_id)
checks wether the question with given id is marked as obligatory or not
Base Exception for all Exceptions relating to Modules/Test.
Output class for assessment test execution.
$questionRelatedObjectivesList
isLastQuestionInSequence($sequenceElement)
isOptionalQuestionAnsweringConfirmationRequired($sequenceKey)
submitSolutionAndNextCmd()
adoptUserSolutionsFromPreviousPass()
performTearsAndAngerBrokenConfessionChecks()
isQuestionSummaryFinishTestButtonRequired()
canSaveResult()
Returns TRUE if the answers of the current user could be saved.
generateRandomTestPassForActiveUser()
resumePlayerCmd()
Resume a test at the last position.
populateQuestionOptionalMessage()
isShowingPostponeStatusReguired($questionId)
handleTearsAndAngerNoObjectiveOrientedQuestion()
executeCommand()
Execute Command.
isValidSequenceElement($sequenceElement)
isFirstQuestionInSequence($sequenceElement)
saveQuestionSolution($authorized=true, $force=false)
saves the user input of a question
handleQuestionActionCmd()
Output class for assessment test execution.
handleSkillTriggering(ilTestSession $testSession)
getNextCommandParameter()
getPresentationModeParameter()
populateQuestionNavigation($sequenceElement, $disabled)
initProcessLocker($activeId)
prepareTestPage($presentationMode, $sequenceElement, $questionId)
handleTearsAndAngerQuestionIsNull($questionId, $sequenceElement)
isNrOfTriesReached()
nr of tries exceeded
const PRESENTATION_MODE_EDIT
getQuestionInstance($questionId, $fromCache=true)
handlePasswordProtectionRedirect()
getCurrentSequenceElement()
showQuestionEditable(assQuestionGUI $questionGui, $formAction, $isQuestionWorkedThrough, $instantResponse)
getQuestionGuiInstance($questionId, $fromCache=true)
getInstantResponseParameter()
ensureExistingTestSession(ilTestSession $testSession)
updateWorkingTime()
updates working time and stores state saveresult to see if question has to be stored or not
handleUserSettings()
Handles some form parameters on starting and resuming a test.
populateInstantResponseBlocks(assQuestionGUI $questionGui, $authorizedSolution)
getQuestionsDefaultPresentationMode($isQuestionWorkedThrough)
getTestNavigationToolbarGUI()
populateTestNavigationToolbar(ilTestNavigationToolbarGUI $toolbarGUI)
const PRESENTATION_MODE_VIEW
isParticipantsAnswerFixed($questionId)
isMaxProcessingTimeReached()
Checks wheather the maximum processing time is reached or not.
getNextSequenceParameter()
showQuestionViewable(assQuestionGUI $questionGui, $formAction, $isQuestionWorkedThrough, $instantResponse)
const SUBMIT_INTERMEDIATE_SOLUTION
static isTestExecutionCommand($cmd)
static getInstance(ilDB $db, ilObjTest $testOBJ, ilTestRandomQuestionSetConfig $questionSetConfig, ilTestRandomQuestionSetSourcePoolDefinitionList $sourcePoolDefinitionList, ilTestRandomQuestionSetStagingPoolQuestionList $stagingPoolQuestionList)
getObjectiveOrientedContainer()
getCommand($cmd)
Retrieves the ilCtrl command.
Class ilTestSubmissionReviewGUI.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static initConnectionWithAnimation()
Init YUI Connection module.
static initjQuery($a_tpl=null)
Init jQuery.