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.