Esempio n. 1
0
 /**
  * Register all needed information about the AssessmentSection involved in a given
  * $routeItem.
  *
  * @param \qtism\runtime\tests\RouteItem $routeItem A RouteItem object.
  */
 protected function registerAssessmentSection(RouteItem $routeItem)
 {
     foreach ($routeItem->getAssessmentSections() as $assessmentSection) {
         if (isset($this->assessmentSectionMap[$assessmentSection]) === false) {
             $this->assessmentSectionMap[$assessmentSection] = array();
         }
         $target = $this->assessmentSectionMap[$assessmentSection];
         $target[] = $routeItem;
         $this->assessmentSectionMap[$assessmentSection] = $target;
         // Register the RouteItem in the assessmentSectionIdentifierMap.
         $id = $assessmentSection->getIdentifier();
         if (isset($this->assessmentSectionIdentifierMap[$id]) === false) {
             $assessmentSectionIdentifierMap[$id] = array();
         }
         $this->assessmentSectionIdentifierMap[$id][] = $routeItem;
     }
 }
 /**
  * Write a route item in the current binary stream.
  * 
  * @param AssessmentTestSeeker $seeker An AssessmentTestSeeker object in order to know tree position for involved QTI Components.
  * @param RouteItem $routeItem A RouteItem object.
  * @throws QtiBinaryStreamAccessException
  */
 public function writeRouteItem(AssessmentTestSeeker $seeker, RouteItem $routeItem)
 {
     try {
         $this->writeTinyInt($routeItem->getOccurence());
         $this->writeShort($seeker->seekPosition($routeItem->getAssessmentItemRef()));
         if (QtiBinaryConstants::QTI_BINARY_STORAGE_VERSION <= 2) {
             // Prior to version 3, only a single assessmentSection might be bound
             // to the RouteItem.
             $this->writeShort($seeker->seekPosition($routeItem->getAssessmentSection()));
         }
         $this->writeShort($seeker->seekPosition($routeItem->getTestPart()));
         if (QtiBinaryConstants::QTI_BINARY_STORAGE_VERSION >= 3) {
             $assessmentSections = $routeItem->getAssessmentSections();
             // From version 3, multiple assessmentSections might be bound
             // to the RouteItem.
             $this->writeTinyInt(count($assessmentSections));
             foreach ($assessmentSections as $assessmentSection) {
                 $this->writeShort($seeker->seekPosition($assessmentSection));
             }
         }
         $branchRules = $routeItem->getBranchRules();
         $this->writeTinyInt(count($branchRules));
         foreach ($branchRules as $branchRule) {
             $this->writeShort($seeker->seekPosition($branchRule));
         }
         $preConditions = $routeItem->getPreConditions();
         $this->writeTinyInt(count($preConditions));
         foreach ($preConditions as $preCondition) {
             $this->writeShort($seeker->seekPosition($preCondition));
         }
     } catch (BinaryStreamAccessException $e) {
         $msg = "An error occured while writing a route item.";
         throw new QtiBinaryStreamAccessException($msg, $this, QtiBinaryStreamAccessException::ROUTE_ITEM, $e);
     } catch (OutOfBoundsException $e) {
         $msg = "A QTI Component position was not found in the assessmentTest tree structure.";
         throw new QtiBinaryStreamAccessException($msg, $this, QtiBinaryStreamAccessException::ROUTE_ITEM, $e);
     }
 }
 /**
  * Gets the tags describing a particular item with an assessment test
  * @param RouteItem $routeItem
  * @return array
  */
 public function getItemTags(RouteItem $routeItem)
 {
     $test = $routeItem->getAssessmentTest();
     $testPart = $routeItem->getTestPart();
     $sections = $routeItem->getAssessmentSections();
     $sectionId = key(current($sections));
     $itemRef = $routeItem->getAssessmentItemRef();
     $itemId = $itemRef->getIdentifier();
     $occurrence = $routeItem->getOccurence();
     $tags = [$itemId, $itemId . '#' . $occurrence, $sectionId, $testPart->getIdentifier(), $test->getIdentifier(), $itemRef->getHref()];
     if ($this->isRunning() === true) {
         $tags[] = $this->getItemAttemptTag($routeItem);
     }
     return $tags;
 }
Esempio n. 4
0
 /**
  * Write a route item in the current binary stream.
  *
  * @param \qtism\runtime\storage\common\AssessmentTestSeeker $seeker An AssessmentTestSeeker object in order to know tree position for involved QTI Components.
  * @param \qtism\runtime\tests\RouteItem $routeItem A RouteItem object.
  * @throws \qtism\runtime\storage\binary\QtiBinaryStreamAccessException
  */
 public function writeRouteItem(AssessmentTestSeeker $seeker, RouteItem $routeItem)
 {
     try {
         $this->writeTinyInt($routeItem->getOccurence());
         $this->writeShort($seeker->seekPosition($routeItem->getAssessmentItemRef()));
         $this->writeShort($seeker->seekPosition($routeItem->getTestPart()));
         $assessmentSections = $routeItem->getAssessmentSections();
         $this->writeTinyInt(count($assessmentSections));
         foreach ($assessmentSections as $assessmentSection) {
             $this->writeShort($seeker->seekPosition($assessmentSection));
         }
         $branchRules = $routeItem->getBranchRules();
         $this->writeTinyInt(count($branchRules));
         foreach ($branchRules as $branchRule) {
             $this->writeShort($seeker->seekPosition($branchRule));
         }
         $preConditions = $routeItem->getPreConditions();
         $this->writeTinyInt(count($preConditions));
         foreach ($preConditions as $preCondition) {
             $this->writeShort($seeker->seekPosition($preCondition));
         }
     } catch (BinaryStreamAccessException $e) {
         $msg = "An error occured while writing a route item.";
         throw new QtiBinaryStreamAccessException($msg, $this, QtiBinaryStreamAccessException::ROUTE_ITEM, $e);
     } catch (OutOfBoundsException $e) {
         $msg = "A QTI Component position was not found in the assessmentTest tree structure.";
         throw new QtiBinaryStreamAccessException($msg, $this, QtiBinaryStreamAccessException::ROUTE_ITEM, $e);
     }
 }