/**
  * Dereference the file referenced by an assessmentItemRef and add
  * outcome/responseDeclarations to the compact one.
  *
  * @param ExtendedAssessmentItemRef $compactAssessmentItemRef A previously instantiated ExtendedAssessmentItemRef object.
  * @param FileResolver $resolver The Resolver to be used to resolver AssessmentItemRef's href attribute.
  * @throws XmlStorageException If an error occurs (e.g. file not found at URI or unmarshalling issue) during the dereferencing.
  */
 protected static function resolveAssessmentItemRef(ExtendedAssessmentItemRef $compactAssessmentItemRef, FileResolver $resolver)
 {
     try {
         $href = $resolver->resolve($compactAssessmentItemRef->getHref());
         $doc = new XmlDocument();
         $doc->load($href);
         foreach ($doc->getDocumentComponent()->getResponseDeclarations() as $resp) {
             $compactAssessmentItemRef->addResponseDeclaration($resp);
         }
         foreach ($doc->getDocumentComponent()->getOutcomeDeclarations() as $out) {
             $compactAssessmentItemRef->addOutcomeDeclaration($out);
         }
         if ($doc->getDocumentComponent()->hasResponseProcessing() === true) {
             $compactAssessmentItemRef->setResponseProcessing($doc->getDocumentComponent()->getResponseProcessing());
         }
         $compactAssessmentItemRef->setAdaptive($doc->getDocumentComponent()->isAdaptive());
         $compactAssessmentItemRef->setTimeDependent($doc->getDocumentComponent()->isTimeDependent());
     } catch (Exception $e) {
         $msg = "An error occured while unreferencing file '{$href}'.";
         throw new XmlStorageException($msg, $e);
     }
 }
 /**
  * Unmarshall an extended version of an assessmentItemRef DOMElement into 
  * a ExtendedAssessmentItemRef object.
  * 
  * @return ExtendedAssessmentItemRef A ExtendedAssessmentItemRef object.
  */
 protected function unmarshall(DOMElement $element)
 {
     $baseComponent = parent::unmarshall($element);
     $identifier = $baseComponent->getIdentifier();
     $href = $baseComponent->getHref();
     $compactAssessmentItemRef = new ExtendedAssessmentItemRef($identifier, $href);
     $compactAssessmentItemRef->setRequired($baseComponent->isRequired());
     $compactAssessmentItemRef->setFixed($baseComponent->isFixed());
     $compactAssessmentItemRef->setPreConditions($baseComponent->getPreConditions());
     $compactAssessmentItemRef->setBranchRules($baseComponent->getBranchRules());
     $compactAssessmentItemRef->setItemSessionControl($baseComponent->getItemSessionControl());
     $compactAssessmentItemRef->setTimeLimits($baseComponent->getTimeLimits());
     $compactAssessmentItemRef->setTemplateDefaults($baseComponent->getTemplateDefaults());
     $compactAssessmentItemRef->setWeights($baseComponent->getWeights());
     $compactAssessmentItemRef->setVariableMappings($baseComponent->getVariableMappings());
     $compactAssessmentItemRef->setCategories($baseComponent->getCategories());
     $responseDeclarationElts = self::getChildElementsByTagName($element, 'responseDeclaration');
     $responseDeclarations = new ResponseDeclarationCollection();
     foreach ($responseDeclarationElts as $responseDeclarationElt) {
         $marshaller = $this->getMarshallerFactory()->createMarshaller($responseDeclarationElt);
         $responseDeclarations[] = $marshaller->unmarshall($responseDeclarationElt);
     }
     $compactAssessmentItemRef->setResponseDeclarations($responseDeclarations);
     $outcomeDeclarationElts = self::getChildElementsByTagName($element, 'outcomeDeclaration');
     $outcomeDeclarations = new OutcomeDeclarationCollection();
     foreach ($outcomeDeclarationElts as $outcomeDeclarationElt) {
         $marshaller = $this->getMarshallerFactory()->createMarshaller($outcomeDeclarationElt);
         $outcomeDeclarations[] = $marshaller->unmarshall($outcomeDeclarationElt);
     }
     $compactAssessmentItemRef->setOutcomeDeclarations($outcomeDeclarations);
     $responseProcessingElts = self::getChildElementsByTagName($element, 'responseProcessing');
     if (count($responseProcessingElts) === 1) {
         $marshaller = $this->getMarshallerFactory()->createMarshaller($responseProcessingElts[0]);
         $compactAssessmentItemRef->setResponseProcessing($marshaller->unmarshall($responseProcessingElts[0]));
     }
     if (($adaptive = static::getDOMElementAttributeAs($element, 'adaptive', 'boolean')) !== null) {
         $compactAssessmentItemRef->setAdaptive($adaptive);
     }
     if (($timeDependent = static::getDOMElementAttributeAs($element, 'timeDependent', 'boolean')) !== null) {
         $compactAssessmentItemRef->setTimeDependent($timeDependent);
     } else {
         $msg = "The mandatory attribute 'timeDependent' is missing from element '" . $element->localName . "'.";
         throw new UnmarshallingException($msg, $element);
     }
     return $compactAssessmentItemRef;
 }
Ejemplo n.º 3
0
 /**
  * Dereference the file referenced by an assessmentItemRef and add
  * outcome/responseDeclarations to the compact one.
  *
  * @param \qtism\data\ExtendedAssessmentItemRef $compactAssessmentItemRef A previously instantiated ExtendedAssessmentItemRef object.
  * @param \qtism\data\storage\FileResolver $resolver The Resolver to be used to resolver AssessmentItemRef's href attribute.
  * @throws \qtism\data\storage\xml\XmlStorageException If an error occurs (e.g. file not found at URI or unmarshalling issue) during the dereferencing.
  */
 protected static function resolveAssessmentItemRef(ExtendedAssessmentItemRef $compactAssessmentItemRef, FileResolver $resolver)
 {
     try {
         $href = $resolver->resolve($compactAssessmentItemRef->getHref());
         $doc = new XmlDocument();
         $doc->load($href);
         $item = $doc->getDocumentComponent();
         foreach ($item->getResponseDeclarations() as $resp) {
             $compactAssessmentItemRef->addResponseDeclaration($resp);
         }
         foreach ($item->getOutcomeDeclarations() as $out) {
             $compactAssessmentItemRef->addOutcomeDeclaration($out);
         }
         foreach ($item->getTemplateDeclarations() as $tpl) {
             $compactAssessmentItemRef->addTemplateDeclaration($tpl);
         }
         foreach ($item->getModalFeedbackRules() as $modalFeedbackRule) {
             $compactAssessmentItemRef->addModalFeedbackRule($modalFeedbackRule);
         }
         if ($item->hasResponseProcessing() === true) {
             $compactAssessmentItemRef->setResponseProcessing($item->getResponseProcessing());
         }
         if ($item->hasTemplateProcessing() === true) {
             $compactAssessmentItemRef->setTemplateProcessing($item->getTemplateProcessing());
         }
         $compactAssessmentItemRef->setShufflings($item->getShufflings());
         $compactAssessmentItemRef->setAdaptive($item->isAdaptive());
         $compactAssessmentItemRef->setTimeDependent($item->isTimeDependent());
         $compactAssessmentItemRef->setEndAttemptIdentifiers($item->getEndAttemptIdentifiers());
     } catch (Exception $e) {
         $msg = "An error occured while unreferencing file '{$href}'.";
         throw new XmlStorageException($msg, XmlStorageException::RESOLUTION, $e);
     }
 }